Область переменных в функциях VBScript
у меня вопрос о переменной области в VBScript. Я знаю, что есть следующие слова (из autoitscript.com):
- Dim = локальная область, если имя переменной еще не существует глобально (в этом случае она повторно использует глобальную переменную!)
- Global = заставляет создавать переменную в глобальной области
- Local = заставляет создавать переменную в области Local/Function
представьте, что я имеем следующее .файл vbs:
Dim strPath
strPath = "C:folder"
DisplayPath strPath
Sub DisplayPath(strPath) 'Does this strPath get it's own local scope?
MsgBox strPath
End Sub
функции: DisplayPath(strPath)
, is strPath
a местные переменной? Или у функций / subs есть доступ к strPath
определяется в верхней части основного раздела скрипта как глобальные переменной?
кроме того, какой смысл явно использовать Dim
против просто определения переменных, как я их использую, что возможно в языках сценариев?
1 ответов
на strPath
на DisplayPath
процедура будет новой переменной, но не по причинам, которые вы ожидаете, есть тонкая проблема с вашим кодом, который затуманит проблему.
при вызове Sub
процедура синтаксис VBScript не содержит скобок. Например:-
Sub MyProc(Param1, Param2)
'' # Do stuff
End Sub
MyProc("Hello", "World")
вышеизложенное приведет к синтаксической ошибке. Она должна называться: -
MyProc "Hello", "World"
теперь, когда есть только один параметр, синтаксическая ошибка не возникает. Это потому что другое использование круглых скобок является частью выражения, например '(a + b) * c'. В случае:-
DisplayPath(strPath)
VBScript разрешает "выражение"(strPath)
и передать результат до DisplayPath
. Его это результат это приводит к новому хранению, удерживающему результат выражения.
вы звонили с
DisplayPath strPath
нет новых.
однако как насчет этого: -
Sub DisplayPath(something)
MsgBox something
End Sub
еще новое хранилище не выделено. something
будет указывать на ту же память, что strPath
делает.
редактировать
код ниже работает: -
Dim strPath
strPath = "c:\folder"
Display
Sub Display()
MsgBox strPath
End Sub
декларация strPath
вне процедуры заставляет его иметь глобальный охват.
Что касается использования явного Dim
что произойдет, если строка назначения выше будет выглядеть так?
strPath = "c:\folder"
новую переменную strPath
вступает в существование и strPath
останутся пустыми. Вы должны всегда начните файлы VBScript со строки: -
Option Explicit
это заставит вас явно Dim
все переменные, котор нужно использовать и сохранят вас часы времени отладки.