5

Lua では、左辺値なしで = 演算子を使用すると、print(r-value) と同等のように見えます。Lua スタンドアロン インタープリターで実行されるいくつかの例を次に示します。

> = a
nil
> a = 8
> = a
8
> = 'hello'
hello
> = print
function: 003657C8

等々...

私の質問は次のとおりです: = 演算子のこの使用法に関する詳細な説明はどこにありますか? それはどのように機能しますか?特別なデフォルトの左辺値を暗示しているのでしょうか? 私の問題の根本は、それに関する情報を見つけるためにGoogleに何を入力すればよいかわからないことだと思います:-)

編集

答えてくれてありがとう、それはインタープリターの機能です。ばかげた質問です。明らかなことを完全に見落とした理由がわからないからです。朝のコーヒーの前に投稿することは避けるべきです:-) 完全を期すために、インタープリターでこれを処理するコードを次に示します。

while ((status = loadline(L)) != -1) {
  if (status == 0) status = docall(L, 0, 0);
  report(L, status);
  if (status == 0 && lua_gettop(L) > 0) {  /* any result to print? */
    lua_getglobal(L, "print");
    lua_insert(L, 1);
    if (lua_pcall(L, lua_gettop(L)-1, 0, 0) != 0)
      l_message(progname, lua_pushfstring(L,
                           "error calling " LUA_QL("print") " (%s)",
                           lua_tostring(L, -1)));
  }
}

edit2 :

本当に完全にするために、スタックに値をプッシュするためのすべてのトリックは、「プッシュライン」関数にあります。

if (firstline && b[0] == '=')  /* first line starts with `=' ? */
  lua_pushfstring(L, "return %s", b+1);  /* change it to `return' */
4

4 に答える 4

15

マニュアルページを引用:

対話モードでは ... 行が '=' で始まる場合、lua は行の残りのすべての式の値を表示します。式はコンマで区切る必要があります。

于 2008-09-27T09:09:05.330 に答える
3

それはスタンドアロンのインタープリターの特徴に違いないと思います。luaをコンパイルしたものでは、それを機能させることはできません。

于 2008-09-27T08:44:02.677 に答える
1

私はそれを機能とは呼びません - インタープリターはステートメントの結果を返すだけです。それは彼の仕事ですよね?

于 2008-09-27T08:48:45.257 に答える
0

Lua割り当ては、 のように何かを返す式ではありませんC

于 2008-09-27T08:58:13.267 に答える