2010-12-23 21 views
1

我將Lua嵌入到C++類中。tolua ++忽略賦值和不等式運算符?

似乎tolua ++忽略了我班的一些重載操作員。

tolua ++發出以下警告:

  • ** tolua ++警告:對於運營商不支持=,忽略
  • ** tolua ++警告:對於運營商不支持=,忽略

有沒有辦法解決?

回答

4

我不熟悉tolua ++,但它是不合適的,它不會支持這兩個。 tolua ++只是禮貌地通知你,所以你不認爲代碼有任何影響。

賦值操作符是沒有意義的在Lua的背景下,和the ~= operator is the negation of ==,所以實施operator==照顧兩個==~=爲您的Lua對象。

編輯:使用這個空間來回答以下提出這樣我就可以包括代碼的一個問題:關於轉讓

誠然,這解釋了不平等的關係,但什麼?

在Lua中,變量沒有輸入,它們只是值的名稱。賦值運算符將任何類型的新值與該名稱相關聯,但不會修改與該名稱相關聯的先前值(例如,該值存在於內存中的某處,不變,等待被垃圾收集,如果沒有進一步引用它存在)。想想分配裝置,用於一個全局變量:

print(math) --> table: 00516620 
math = "foo" 
print(math) --> foo 

這下聯是等價於:

_G.math = "foo" 

換句話說,math=val正在取代在_G["math"]值,因此這將意味着覆蓋operator=爲數學對象?沒有。

最接近修改賦值運算符的是__newindex metamethod,它只適用於tables/userdata,所以對本地沒有影響。在我們的math="foo"示例中,__newindex將在_G而不是math,甚至在此情況下甚至不會被調用,因爲_G.math具有現有值(__newindex在您嘗試將值分配給不存在的密鑰時調用)

+0

確實,這解釋了不平等關係,但分配呢? – skyeagle 2010-12-23 13:20:40