2016-05-29 15 views
2

__eqのメタメソッドを使用して)Luaの等価演算子をオーバーライドするときに、プリミティブの等価性をチェックする方法がありますか(つまり、オーバーライドされた__eqは呼び出しませんが、これをC APIから行う必要がありますが、そこでは適切な関数を見つけることができません。例えばLuaの2つの値が元々等しいかどうかをチェックする方法は?

some_comparison()__eqメタメソッドを呼び出しません

lua_newtable(L); 
lua_newtable(L); 
assert(!some_comparison()); 
lua_pushvalue(L,-1); 
assert(some_comparison()); 

(特に、これを満たしていないlua_compare()を注意してください、私はあなたがする場合は、lua_rawcompare()をしたい - 。または私に同等のものを与えるというトリックまたは回避策のアイデアは__eq実装で無限再帰を防ぐためです。 ...)

+2

'lua_rawequal'。 – Sneftel

答えて

4

私が正しくあなたの質問を理解していれば、私はあなたがlua_rawequalを使用することを意味だと思う:

int lua_rawequal (lua_State *L, int index1, int index2); 

戻り値1指数index1とで二つの値の場合は と基本的に同じです(つまり、metamethodsを呼び出さない)。それ以外の場合は は0を返します。いずれかのインデックスが有効でない場合は0も返します。

+1

おっと、そうです。 APIを2回スキャンして何とかそれを逃した! – BadZen

関連する問題