9

質問にタイトルを付ける方法がよくわかりませんでしたが、次のluaコードを検討してください。

print(function ()
    s = ""
    for i = 1, 10 do
      s = s..tostring(i)
    end
    return s
  end)

ただし、function()はクロージャを返すため、これは関数アドレスのみを出力します。無名関数を評価する方法はありますか?ラムダを追加の括弧で囲むことができるスキームのように?

((lambda ()(display "Hello World")))

もちろん、事前に関数を定義して後で呼び出すこともできますが、luaでこれが可能かどうかだけが気になりました。すべての返信を事前に感謝します。

4

2 に答える 2

14

関数定義を括弧で囲み、後に追加して呼び出す必要があります()。これをLuaインタープリターに入れる:

> print((function ()
    s=""
    for i=1,10 do
       s=s..tostring(i)
    end
    return s
  end)())

次の出力が得られます

> 12345678910
于 2012-04-16T14:20:44.117 に答える
4

これが必要なグローバルな動作である場合、最も簡単な解決策は、渡された関数を評価するようにprintをフックすることです。そうすれば、コールサイトをラムダのままにしておくことができます。

于 2012-04-16T18:06:54.113 に答える