Перейти к содержимому

Фотография

QTP,VBScript


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 2

#1 lenavolf1

lenavolf1

    Новый участник

  • Members
  • Pip
  • 2 сообщений

Отправлено 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

#2 slat

slat

    Новый участник

  • Members
  • Pip
  • 69 сообщений
  • Город:Odessa

Отправлено 28 июля 2008 - 13:41

Sub - это процедура она не возвращает значение и поэтому передавать ей параметр надо без скобок Sub Variable, а вот при использовании функции которая возвращает что то надо писать a = Func(Variable)
  • 0

#3 gralex

gralex

    Новый участник

  • Members
  • Pip
  • 52 сообщений
  • ФИО:Груба Алексей

Отправлено 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
  • 0


Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных