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 に答える