5

次のように文字列をテーブルに挿入するとします。

table.insert(tbl, mystring)

これは、:mystringで出現するすべての「a」を「b」に置き換えることによって生成されinputます。

mystring = string.gsub(input, "a", "b")

gsub2つの結果を返すため、2つを1つのステートメントに結合する明白な方法は機能しません。

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関数を記述したりする傾向がありますか?

4

3 に答える 3

12

式を括弧で囲むことができます。

table.insert(tbl, (string.gsub(input, "a", "b")))

これにより、最初の結果のみが選択されます。

n番目の結果を取得するには、それを使用selectして括弧で囲みます。

func1( (select(n, func2())) )
于 2010-04-24T14:30:06.830 に答える
5

次のように式を括弧で囲みます。

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)
于 2010-04-24T14:31:16.033 に答える
5

1行で:({ funct(args) })[n]名前付き変数を宣言せずにn番目の結果を返します。

于 2013-09-15T14:14:10.597 に答える