2016-09-20 3 views
0



У меня проблема с назначением/получением правильных значений в/из массива, который находится внутри класса в VBScript. Всякий раз, когда я пытаюсь установить значение массива через автономную функцию, он просто не работает, и я продолжаю получать старые значения массива. Вот пример кода:HP-UFT/VBscript - Установка значения массива через функцию с помощью ссылки на индекс массива

Class NewClass 

    Public TestValues 

    Public Sub Init() 
     TestValues = array("value0", "value1", "value2") 
    End Sub 
End Class 

Class NewFunctions 

    Public Function GetValue(xRef) 
     GetValue = xRef(2) 
     print "Value within Function: " & xRef(2) 
    End Function 

    Public Sub SetValue(xRef, xValue) 
     xRef(2) = xValue 
     print "Value within Sub: " & xRef(2) 
    End Sub 
End Class 

Dim MyClass, MyFunction 
Set MyClass = New NewClass 
Set MyFunction = New NewFunctions 

Теперь, когда я пытаюсь установить индекс 2 данного массива MyClass.TestValues ​​ с SetValue Sub, он утверждает, что новое значение было установлено , но когда я затем вызвать GetValue для этого массива или распечатать содержание MyClass.TestValues ​​(2) непосредственно, я до сих пор получаю старые значения:

MyFunction.SetValue MyClass.TestValues, "newvalue2" 

Возвращает: Значение в Суб: newvalue2


Но когда я получить значение с GetValue:

MyFunction.GetValue MyClass.TestValues 

Она возвращает: Значение в функции: значение2, который является старое значение.


Когда я, однако, установить массив непосредственно:

Myclass.TestValues(2) = "newvalue2" 

затем призывающий с:

MyFunction.GetValue MyClass.TestValues 

дает мне правильный результат: значения в пределах функции: newvalue2

Я не уверен, это общее поведение VBScript, и я ошибаюсь в надежде изменить значения массива в этой «грязной» манере или строго связан с HP-UFT (Unified Functional Testing), так как это я мог наблюдать это. Я не являюсь профессиональным VBScripter, поэтому я ценю любую помощь.

ответ

2

Это documented поведение

Аргумент в классе

Если параметр задан как ByRef, аргумент передается по значение, если переменная передается в качестве аргумента находится в класс

+0

Благодарим за отзыв. Каким будет подходящий способ установить значение массива (по индексу 2) с помощью ** MyFunction.Setvalue **? –

+0

@JoeyJoe, если 'xRef' не требуется, чтобы быть массивом, измените' NewFunctions.SetValue', чтобы не ожидать массив, а ссылку на объект и вызвать метод на этом объекте, чтобы изменить их внутреннее состояние. Если вы не можете этого сделать, измените способ отображения свойства 'NewClass.TestValues', обернув его в объект, который имитирует поведение массива. –

Смежные вопросы