1

这行得通。

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)      
    }
}

为什么?

手册似乎暗示了什么。

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

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

4

1 回答 1

1

手册说:

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

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

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

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

于 2013-03-02T09:16:21.230 回答