QTP,VBScript
Автор lenavolf1, 28 июл 2008 11:52
Сообщений в теме: 2
#1
Отправлено 28 июля 2008 - 11:52
Здравствуйте! Я новичек в работе с QTP.
Помогите разобраться с возникшим вопросом и объяснить ситуацию!
В нижеописанной программе система по идее должна выдавать либо 0, либо ошибку, т.к. после прохождения процедуры объекта как такового не существует. Почему в результате выходит 1 ???
Option explicit
Sub stupid (Byref oDic)
oDic. Add "Some","thing" 'adds a key to the dictionary
Set oDic=nothing 'destroy the dictionary
End Sub
Dim oDictionary
Set oDictionary = createobject("Scripting.Dictionary") ' CREATES NEW DICTIONARY
stupid (oDictionary) 'sends the dictionary to the function
msgbox oDictionary.Count
Кстати, если опустить скобки в предпоследней строке:
stupid oDictionary 'sends the dictionary to the function
, то результат получается верный: ошибка: объект не определяется.
Заранее благодарна.
Елена.
Помогите разобраться с возникшим вопросом и объяснить ситуацию!
В нижеописанной программе система по идее должна выдавать либо 0, либо ошибку, т.к. после прохождения процедуры объекта как такового не существует. Почему в результате выходит 1 ???
Option explicit
Sub stupid (Byref oDic)
oDic. Add "Some","thing" 'adds a key to the dictionary
Set oDic=nothing 'destroy the dictionary
End Sub
Dim oDictionary
Set oDictionary = createobject("Scripting.Dictionary") ' CREATES NEW DICTIONARY
stupid (oDictionary) 'sends the dictionary to the function
msgbox oDictionary.Count
Кстати, если опустить скобки в предпоследней строке:
stupid oDictionary 'sends the dictionary to the function
, то результат получается верный: ошибка: объект не определяется.
Заранее благодарна.
Елена.
#2
Отправлено 28 июля 2008 - 13:41
Sub - это процедура она не возвращает значение и поэтому передавать ей параметр надо без скобок Sub Variable, а вот при использовании функции которая возвращает что то надо писать a = Func(Variable)
#3
Отправлено 31 июля 2008 - 11:53
Весьма поверхностный ответ, вы бы вначале попробовали выполнить код, приведенный автором вопроса.Sub - это процедура она не возвращает значение и поэтому передавать ей параметр надо без скобок Sub Variable, а вот при использовании функции которая возвращает что то надо писать a = Func(Variable)
На самом деле приведенный здесь пример достаточно интересен, у меня был подобный опыт при передаче массивов в качестве ссылочных параметров в функции - когда наблюдалось разное поведение и в некоторых случаях массив не заполнялся, но, к сожалению, до конца в этих проблемах я не стал разбираться.
Здесь обнаружилась очень интересная особенность vbscript - процедуру с такой сигнатурой Sub proc1(ByRef param1) можно вызывать несколькими способами:
1) proc1 param1
2) proc1(param1)
3) Call proc1(param1)
Так вот если использовать второй вариант вызова, то параметр param1 передается не по ссылке, а по ЗНАЧЕНИЮ (ByVal)!!!
Более детальная информация по этому поводу здесь ссылка
ИМХО, одна из непоняток vbscript
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных

