Lua 5.3爲什麼在Lua 5.3中短暫的調用表格不適用於表格?
這不行,爲什麼?爲什麼簡短的調用表格不適用於表格?
t = { "a", "b", "c" }
s = t:concat()
這個工程...
s = table.concat(t)
Lua 5.3爲什麼在Lua 5.3中短暫的調用表格不適用於表格?
這不行,爲什麼?爲什麼簡短的調用表格不適用於表格?
t = { "a", "b", "c" }
s = t:concat()
這個工程...
s = table.concat(t)
的string
庫導出的函數可以被所有串共享的元表。這就是爲什麼您可以使用str:upper()
就像string.upper(str)
一樣。
這不是table
庫的情況。你必須手動設置metatable。例如,這可以工作:
local t = { "a", "b", "c" }
t.__index = table
setmetatable(t, t)
local s = t:concat()
print(s) -- abc
這也是我得到的結論,但爲什麼系統默認沒有將包表綁定到所有表,var似乎是一個Variant(和少數類型的聯合),所以對於一個字符串,您可能也會得到一個指向String包的指針,然後s:find ...得到重定向...如果表的鏈接方式與short t:concat相同,則可以正常工作,但如果__metatable定義爲解釋器可以在該對象的metatable中進行搜索... t在該上下文中不再是表格,而是更多原型(原型編程風格)... – voidptr
@voidptr所有字符串共享相同的metatable。讓所有表共享相同的metatable通常是一個糟糕的主意。表格有自己的自定義metatable是很常見的。 –
我不這麼認爲^^^^ ...也許99%的腳本中的時間表可能會使用向量或表(又名Smalltalk字典),並處理commons數據,因此具有更完整的單一metatable可以是非常有用的...另一方面,如果你想用其他原因或功能的表,你仍然可以刪除鏈接到標準表,並把你自己的,前模擬類或原型基礎語言或只是有用的垃圾對象...這只是我反正:o) – voidptr
因爲's = t:concat()'與's = t.concat(t)'相同。看看爲什麼這是不正確的? –
因爲表格沒有默認的metatable到表格庫表格。 –