質問

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

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

など...

私の質問は:=演算子のこの使用法の詳細な説明はどこにありますか?どのように機能しますか?特別なデフォルトのl値を暗示しているのですか?私の問題の根源は、それについての情報を見つけるために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' */
役に立ちましたか?

解決

manページの引用:

  

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

他のヒント

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

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

Assignmentは、 C にあるような Lua に何かを返す式ではありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top