2015-04-04 58 views
2

如果我有這樣的結構:lua metatable錯誤或功能?

a.key = b 

並同時具有附加有元表和B具有一個附加的元表。然後,b的metatable setter將被調用以將鍵設置爲b。這是lua 5.3.0的錯誤嗎?

編輯:a和b是字符串。

+2

似乎'a'和'b'共享一個metatable,或者你誤解了newindex處理程序中的參數。您需要提供[SSCCE](http://sscce.org)。 – lhf 2015-04-04 18:17:47

回答

2

表和完整的userdata有單獨的metatables(雖然多個 表和userdata可以共享它們的metatables)。所有其他 類型的值每個類型共享一個單獨的metatable;也就是說,對所有數字都有一個 單元表,其中一個用於所有字符串,等等。默認情況下,一個值沒有元表,但字符串庫爲該字符串類型設置了一個 metatable(見第6.4節)。

回答文檔。它是一個特徵:a和b是字符串,因此共享它們的元字符。

+0

如果你有'a.key = b','a'是一個字符串嗎? – 2015-04-04 19:05:28

+0

@YaoHao一個metatable可以設置任何值,只是它可能不是一個單獨的metatable。在字符串的情況下,它在所有的字符串之間共享。因此,字符串可能具有屬性和其他元功能。 – user1095108 2015-04-04 19:55:38

+0

在你自己的問題的代碼中顯示你的意思。沒有人能看到'a'和'b'是來自'a.key = b'的字符串。 – 2015-04-04 20:01:45