У меня проблема с назначением/получением правильных значений в/из массива, который находится внутри класса в 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) с помощью ** MyFunction.Setvalue **? –
@JoeyJoe, если 'xRef' не требуется, чтобы быть массивом, измените' NewFunctions.SetValue', чтобы не ожидать массив, а ссылку на объект и вызвать метод на этом объекте, чтобы изменить их внутреннее состояние. Если вы не можете этого сделать, измените способ отображения свойства 'NewClass.TestValues', обернув его в объект, который имитирует поведение массива. –