对象方法不接收可变参数

时间:2012-11-27 06:11:52

标签: syntax autohotkey variadic-functions

这很有效。

string = <div>foo</div><br /><div>bar</div><br />
ModifyText(string, {"<br\s\/?>": "REPLECED`r`n", "<div>": "<p>", "</div>": "</p>"}*)
msgbox % string
ModifyText(ByRef strHaystack, oParams*) {
    for k, v in oParams 
        strHaystack := RegexReplace(strHaystack, k, v)
}

但是,当我使用类方法执行相同操作时,它会失败。类方法不接收传递的对象。

string = <div>foo</div><br /><div>bar</div><br />
o := new ByrefTest
o.ModifyText(string, {"<br\s\/?>": "REPLECED`r`n", "<div>": "<p>", "</div>": "</p>"}*)
msgbox % string
class ByrefTest 
{
    ModifyText(ByRef strHaystack, oParams*) {
        for k, v in oParams 
            strHaystack := RegexReplace(strHaystack, k, v)      
    }
}

为什么?

手册似乎意味着什么。

  

设置对象的属性时不能使用此语法,因为   最后一个物理参数实际上是指定的值。

但这听起来并不像是这个限制。

1 个答案:

答案 0 :(得分:1)

手册说:

  

当直接调用用户定义的函数时,参数数组可能包含命名项。

这意味着在其他情况下支持命名项目/参数

当您直接调用用户定义的可变参数函数ModifyText时,命名项("<br\s\/?>""<div>""</div>")将被复制到oParams。请注意,对象本身不会传递给函数。

当您通过调用ByrefTest.ModifyText对象间接调用o函数时,仅使用数组中的编号项(但在这种情况下没有任何编号项)。命名项目将被忽略。