学会洒脱 发表于 2008-11-4 10:06:53

自定义函数的问题(版主请进)[已解决]

在自定义函数时,如果想写个带可选参数的函数,那要怎么写?
比如 obj_get_text("aa",text,)方括号中一样,怎么写才能有这样效果.

[ 本帖最后由 学会洒脱 于 2008-11-6 13:06 编辑 ]

学会洒脱 发表于 2008-11-4 13:27:56

总结下:TSL语言是否支持自定义函数能够使用可选参数

dabie 发表于 2008-11-4 13:49:52

好象不行的,不过QTP中有人用类解决了可选参数这个问题

学会洒脱 发表于 2008-11-4 14:39:49

用类来解决?是编上DLL吗?怎么解决的呢?

dabie 发表于 2008-11-4 15:27:47

Class AddNew
                Dim para1,para2,para3
                Sub Class_Initialize
                        para1 = 1
                        para2 = 2
                        para3 = 3
                End Sub

                Sub setPara1(byval para)
                        para1 = para
                End Sub

                Sub setPara2(byval para)
                        para2 = para
                End Sub

                Sub DoAdd()
                        msgbox "para1=[" & para1 & "] para2=[" & para2 & "] para3=[" & para3 & "]"
                End Sub

      End Class

      Set Customer = new AddNew
      Customer.DoAdd()
      Customer.setPara1(111)
      Customer.DoAdd()
      Customer.setPara2(222)
      Customer.DoAdd()
      Set Customer = nothing
这个是别人那拷过来的,好象能稍微变向的解决下问题,这个是在QTP中的

学会洒脱 发表于 2008-11-4 15:55:51

仔细看了下.这个MS跟自定义函数...是否允许自定义函数使用可选参数没什么共通性啊....

dabie帮我解释下...谢谢哈..

dabie 发表于 2008-11-4 16:23:40

para好比自定义函数的参数
doadd就好比你要自定义的函数
.setpara为要传递的参数设置其值,需要几个参数就设置几个,这样就有点变向的实现了自定义函数的参数个书可选
设置好参数后用该类方法doadd(自定义函数),这样就基本能实现自定义函数参数可选,但实际应用的时候参数初始值的不同实际达到的效果也各不相同,具体估计要增加很多的判断

这是我个人对这段代码的理解

学会洒脱 发表于 2008-11-4 16:52:38

例:
obj_get_text("aa",text,);获取坐标范围内的text文本
obj_get_text("aa",text);获取aa控件的text文本

同一个obj_get_text函数,根据需要带不同个数的参数.

dabie , 我想要的是写好函数后,某个参数想用就用,想不用就不用,但函数里面肯定是写好的.但就是不知道支持这样的应该怎么写?

谢谢你的关注,你的回答给了我其他方面的参考,谢谢

dabie 发表于 2008-11-4 17:33:01

Class AddNew
                Dim obj,text,x1,y1,x2,y2
                Sub Class_Initialize
                        obj = "aa"
                        text = "text"
                        x1 = 0
                        y1=0
                        x2=0
                        y2=0
                End Sub

                Sub setPara1(byval objactual)
                        obj = objactual
                End Sub

                Sub setPara2(byval textactual)
                        text = textactual
                End Sub

                //x1,x2,y1,y2的设置函数同样写
         Sub setx1(byval x1actual)
                        x1= x1actual
                End Sub

                Sub DoAdd()
                        msgbox "obj=[" & obj& "] text=[" & text& "] x1=[" & x1 & "]"
                End Sub

      End Class

      Set Customer = new AddNew
      Customer.setPara1("aa")
      Customer.setPara2("text")
      Customer.DoAdd()
      Set Customer = nothing

      如果要传x1,x2等则增加
    customer.setx1();
      customer.setx2()等函数,并在Customer.DoAdd()前设置其值
   想用x1,y1等就设置下,不想用就不设置,使用默认的初始值,所以默认的初始值设置是需要考虑的,
不知道这样是否能理解

dionysus 发表于 2008-11-4 21:24:04

WR是可以编写带参数的自定义function,但是如果参数不用的话最好赋一个默认值吧

学会洒脱 发表于 2008-11-6 12:59:36

dabie的方法可能有用,但我现在接触QTP不多,理解不深

这两天翻WR的库函数,总算有所收获

在函数里增加以下代码就可以实现自定义函数的功能f (nargs() == 2)
    click_offset = LIST_DEFAULT_CLICK_LOCATION;
  else if (nargs() != 3)
      return(report_param_msg());
这段代码的意思是我想解释下,但发觉小弟我的语言水平太差,怕一解释大家看得更累,还是自己看比较清晰点.

如有什么问题,欢迎跟我讨论...
新建自动化交流群(1361827),欢迎高手加入

[ 本帖最后由 学会洒脱 于 2008-11-6 13:04 编辑 ]
页: [1]
查看完整版本: 自定义函数的问题(版主请进)[已解决]