0

#1Lasso 9 でキャプチャを学習しようとしていますが、キャプチャ内の条件内からローカル変数にアクセスする方法を理解するのに苦労していますarray->forEach。多分私のアプローチはすべて間違っています。使用する必要がある親キャプチャへの参照はありますか? 以下は作業コードです:

define paramstovars() => {

    local(p = web_request->params)

    #p->foreach => {
        local(i = #1)
        if(#i->type == 'pair') => {
            var(#i->first->asstring = #i->second->asstring)
        }
    }

}

以下は、冗長なローカル変数定義に依存せずに機能させようとしているコードです。

define paramstovars() => {

    local(p = web_request->params)

    #p->foreach => {
        if(#1->type == 'pair') => {
            var(#1->first->asstring = #1->second->asstring)
        }
    }

}

この 2 番目の例では、 を呼び出している回線で、 Position was out of range: 1 max is 0 (Error Code -1)var()というエラーが表示されます。

このカスタム メソッドに関する明らかなセキュリティ上の懸念は別として、ネストされた条件内で #1 を使用できるようにする最も効率的な方法は何ですか?

4

3 に答える 3

1

#1 は各キャプチャ内で置き換えられます。つまり、より深いキャプチャで使用するには、別のローカルに割り当てる必要があります。ローカルで再度作業する必要がある場合は、代わりにクエリ式を使用してみてください。

 with i in web_request->params do {
    if(#i->type == 'pair') => {
        var(#i->first->asstring = #i->second->asstring)
    }
}

また、この方法で変数を設定することはお勧めしません — セキ​​ュリティ上のリスクがあります。パラメータを単一の変数に格納し、そこから特定の変数を設定する可能性がある方がよいでしょう。ここに似たようなことをする一連のタグがあります: getparam / postparam

于 2013-10-17T13:44:33.803 に答える
0

後でいくつかの実験。

私が書いたこととは逆に、#1 を数回呼び出すことができますが、キャプチャの中にキャプチャ (条件) があることがあなたの努力を台無しにします。2 番目のキャプチャには、独自の入力パラメーターがあります。

これは、あなたがやりたいことを実行するための、テスト済みの実際の例です。

local(
    myarray = array(1, 2 = 'two', 3 = 'four', 4),
    mypairs = map
)

#myarray -> foreach => {
    if(#1-> isa(::pair)) => {
        #mypairs -> insert(#1 -> first -> asstring = #1 -> second -> asstring)
    }(#1)
}
#my pairs

結果は map(2 = two, 3 = four) になります

トリックは、 foreach パラメータを条件付きキャプチャに送信することです: `{some code}(#1)

さて、すべてがうまくいきました。タグスワップへの Ke Carltons の最新の追加をご覧になることをお勧めします。あなたがやろうとしているように、一連の動的変数を作成するよりも、同じ問題をうまく解決できます。

www.lassosoft.com/tagswap/detail/web_request_params

于 2013-10-17T13:51:47.250 に答える