4
我一直在學習在Lua元表,我想實現的範圍運營商在Ruby中,所以我用這個模型Lua的自定義數字級聯
debug.setmetatable(1, {
__concat = function(a, b)
if a > b then
error(table.concat({
"attempt to create a range of values with a",
"minimum larger than the maximum"
}, " "))
elseif a == b then
return a
else
return unpack((function(nStart,nEnd)
local nTable = {}
for it = nStart,nEnd do
table.insert(nTable, it)
end
return nTable
end)(a, b))
end
end
})
print(6 .. 6)
但似乎它繼續使用缺省行爲。有什麼辦法讓這個工作?我意識到我可以創建一個函數來模擬行爲,並使用range(n,n2)或類似的名稱來調用它,但這會破壞目的。謝謝。
謝謝,我不認爲我可以輕鬆改變這種行爲? – Hal
您必須在代碼生成器中查找基本工作,以便在拼接附近安排'tostring()'的效果。 Lua的消息來源評論得很好,但這不是微不足道的。第一步是消除自動轉換爲字符串,第二步是擴大使用'__concat'。 – RBerteig
@Hal這是可行的,但至少需要知道一些C。請參閱我的答案附錄。當你可以做一個簡單的「範圍」功能時,它可能比它的價值更加努力。語法糖有其成本。 –