LUAでは、カスタム関数なしでn番目の結果を簡単に選択できますか?
-
01-10-2019 - |
質問
次のように、文字列をテーブルに挿入しているとします。
table.insert(tbl, mystring)
そしてそれ mystring
「a」のすべての出来事を「b」に置き換えることによって生成されます input
:
mystring = string.gsub(input, "a", "b")
2つを1つのステートメントに組み合わせる明白な方法は機能しません。 gsub
2つの結果を返します。
table.insert(tbl, string.gsub(input, "a", "b")) -- error!
-- (second result of gsub is passed into table.insert)
これは、複数の返品値をサポートするために支払われる価格だと思います。問題は、最初の返品値のみを選択するための標準的な組み込みの方法はありますか?見つけたとき select
私はそれがまさにそれがしたことだと思ったが、悲しいかな、それは実際に選択する すべて N以降の結果であるため、このシナリオでは役に立ちません。
今、私は自分自身を定義できることを知っています select
次のように:
function select1(n, ...)
return arg[n]
end
table.insert(tbl, select1(1, string.gsub(input, "a", "b")))
しかし、これはこれを行うための組み込みの方法が期待されるため、これは正しく見えません。
それで、私はいくつかの組み込みのコンストラクトが欠けていますか?そうでない場合、LUA開発者は別の変数を使用して正しい引数を抽出するか、自分の引数を書く傾向がありますか select1
関数?
解決
括弧で式を囲むことができます:
table.insert(tbl, (string.gsub(input, "a", "b")))
これにより、最初の結果のみが選択されます。
n番目の結果を取得するには、使用できます select
括弧で囲まれています。
func1( (select(n, func2())) )
他のヒント
このような括弧に表現を置く:
table.insert(tbl, (string.gsub(input, "a", "b")))
1つの返品値を強制します。または、このように両方を捕まえることができます:
str,cnt = string.gsub(input, "a", "b")
table.insert(tbl, str)
またはさらに良いことに、ダミーはそれをキャッチして変数を保存します。
str,_ = string.gsub(input, "a", "b")
table.insert(tbl, str)
1行: ({ funct(args) })[n]
名前付き変数を宣言することなく、n'th結果を返します。