这很有效。
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)
}
}
为什么?
手册似乎意味着什么。
设置对象的属性时不能使用此语法,因为 最后一个物理参数实际上是指定的值。
但这听起来并不像是这个限制。
答案 0 :(得分:1)
手册说:
当直接调用用户定义的函数时,参数数组可能包含命名项。
这意味着在其他情况下支持命名项目/参数 。
当您直接调用用户定义的可变参数函数ModifyText
时,命名项("<br\s\/?>"
,"<div>"
和"</div>"
)将被复制到oParams
。请注意,对象本身不会传递给函数。
当您通过调用ByrefTest.ModifyText
对象间接调用o
函数时,仅使用数组中的编号项(但在这种情况下没有任何编号项)。命名项目将被忽略。