2016-09-20 45 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 

现在,当我尝试设置索引给定阵列的2MyClass.TestValues的SetValue子,其声称新的值已被设定,但是当我再调用的GetValue该数组或打印出来的MyClass.TestValues(2)直接,我仍然得到了旧的价值观念的内容:

MyFunction.SetValue MyClass.TestValues, "newvalue2" 

它返回:差值子内:newvalue2


但是,当我检索与的GetValue值:

MyFunction.GetValue MyClass.TestValues 

它返回:价值函数中:VALUE2,这是旧的价值。


我,不过,直接设置数组:

Myclass.TestValues(2) = "newvalue2" 

然后美其名曰:

MyFunction.GetValue MyClass.TestValues 

给了我正确的结果:功能内值:newvalue2

我不确定是否这是一个普遍的VBScript行为,我希望以这种'肮脏'的方式更改数组值,或者这是否严格与HP-UFT(统一功能测试)相关,因为这是我可以观察到的情况。 我不是一个熟练的VBScripter,所以我很感激任何帮助。

回答

2

这是一个documented行为

参数在一类

如果该参数被指定为的ByRef,该参数按 值传递如果发送作为参数的变量是在一个

+0

感谢您的回复。然后用** MyFunction.Setvalue **来设置数组值的正确方法是什么(在索引2上)? –

+0

@JoeyJoe,如果'xRef'不需要是一个数组,修改'NewFunctions.SetValue'不要期待一个数组,而是一个对象引用,并调用该对象的一个​​方法来改变它们的内部状态。如果你不能这样做,就改变'NewClass.TestValues'属性的公开方式,把它包装在一个模仿数组行为的对象中。 –