2

私はLuaが初めてなので、チュートリアルで何かを見逃しているかもしれませんが、問題は次のとおりです。

元のテーブルと、それに適用するいくつかの演算子を含むメタテーブルがあります。

original = { 1, 2, 3 }

test = setmetatable(original, {
  __add = function (lhs, rhs)
    print('adds')
  end,
  __mul = function (lhs, rhs)
    print('multiplies')
  end  
})

残念ながら、次のような操作を行っているとき:

test = test + 3
test = test * 3

エラーが表示されます:

attempt to perform arithmetic on global 'test' (a table value)

この問題に関する説明は見つかりませんでした。また、メタテーブルが別の変数であり、メソッドに渡された場合、それが機能することに気付きsetmetatableました..

4

2 に答える 2

5
test = test + 3

以下と大まかに同等です。

test = getmetatable(test).__add(test, 3)

の戻り値を__addto に代入していますtest

_addは何も返さないため、最初の行の後testは isnilです。次に、もう一度実行します。

test = getmetatable(test).__add(test, 3)

のメタテーブルをインデックス化または取得することはできませんnil


これを発見したのは簡単で、おそらく私が最初に試したことは次のとおりです。

test = test + 3
print(test)
test = test * 3
于 2013-11-19T19:58:42.623 に答える
4

私が得るエラーは

グローバル 'test' (nil 値) で演算を実行しようとしています

これはtest、最後の行でそれが nil であることを意味します。で何かを返す必要があります__add

于 2013-11-19T16:16:08.110 に答える