lua中是否有const關鍵字?還是其他類似的東西?因爲我想把我的變量定義爲const並且防止變量的值發生變化。 在此先感謝。是否有任何關鍵字像const或其他任何與lua一樣的工作?
15
A
回答
11
Lua確實不是自動支持常量,但您可以添加該功能。例如,將常量放在一個表中,並使用metatable使表只讀。
這裏是如何做到這一點:http://andrejs-cainikovs.blogspot.se/2009/05/lua-constants.html
的複雜性在於,你的常量的名稱將不會僅僅是「A」和「B」,但像「CONSTANTS.A」和「CONSTANTS.B 」。您可以決定將所有常量放在一個表中,或者將它們邏輯分組到多個表中;例如數學常數的「MATH.E」和「MATH.PI」等。
2
Lua或類似結構中沒有const
關鍵字。
最簡單的辦法是寫一個大的謹慎評論,告訴它禁止寫入該變量...
然而技術上是可行的禁止寫入(或讀出)一個全球通過爲全球環境_G
(或Lua 5.2中的_ENV
)提供metatable而變化。
事情是這樣的:
local readonly_vars = { foo=1, bar=1, baz=1 }
setmetatable(_G, {__newindex=function(t, k, v)
assert(not readonly_vars[k], 'read only variable!')
rawset(t, k, v)
end})
然後,如果你嘗試的東西分配給foo
,拋出一個錯誤。
+0
此代碼不正確。它將防止設置新變量,但不會改變它們。 – ZzZombo
3
如前所述,Lua中沒有const
。
你可以使用這個小解決方法,以「保護」的全局變量(相對於保護表):
local protected = {}
function protect(key, value)
if _G[key] then
protected[key] = _G[key]
_G[key] = nil
else
protected[key] = value
end
end
local meta = {
__index = protected,
__newindex = function(tbl, key, value)
if protected[key] then
error("attempting to overwrite constant " .. tostring(key) .. " to " .. tostring(value), 2)
end
rawset(tbl, key, value)
end
}
setmetatable(_G, meta)
-- sample usage
GLOBAL_A = 10
protect("GLOBAL_A")
GLOBAL_A = 5
print(GLOBAL_A)
相關問題
- 1. Lua string.len,string.lower或任何其他字符串函數不工作
- 2. 是否有任何.NET DLL,GIMP或其他圖像程序工作?
- 3. 有關SqlWorkflowInstanceStore如何與其他模式一起工作的任何想法?
- 4. Java中是否有任何關鍵字與C#中的'AS'關鍵字相似?
- 5. 是否有在Objective-C在C#或任何其他語言的任何自定義Date類一樣的DateTime
- 6. 是否有任何其他程序/軟件協同工作,就好像在VBA
- 7. 是否有任何像HTML中的DIV一樣工作的Crystal Reports對象?
- 8. 是否有任何其他樣式呈現UIAlertView?
- 9. 是否有任何針對Socket.IO(或其他)的託管服務?
- 10. 關鍵字「const」如何工作?
- 11. 是否有任何工具像MaintainJ IntelliJ
- 12. 協程棧是否以Lua,Python,Ruby或任何其他語言增長?
- 13. 在JDK6.0或其他庫中是否有任何併發LinkedHashSet?
- 14. Lua表檢查是否有任何變量匹配任何值
- 15. 流明中的任務調度是否像Laravel一樣工作?
- 16. 是否有任何JavaScript庫與hashbang/shebang(#!)網址一起工作?
- 17. 是否有任何獲取關鍵字類別的API?
- 18. 確定是否三個區域的人有任何關鍵字
- 19. 是否有任何其他的控制一樣的ListView在Win32或是否有任何的方式來刪除ListView控件是在Win32
- 20. python中是否有任何工作流程工具或庫?
- 21. 是否有任何與Skype交互庫的Lua編譯器?
- 22. 任何其他像SharpArchitecture一樣的ASP.NET MVC框架?
- 23. hbase - 是否有任何「解釋」關鍵字?
- 24. 是否有任何理由使用self關鍵字?
- 25. 是否有任何jsch ChannelSftp的功能像命令'cp'工作
- 26. Android列表視圖或任何其他與開關選項
- 27. 任何其他這樣的網站?
- 28. XNA和Keyboard.GetState()或任何其他鍵盤問題有問題嗎?
- 29. 是否有像autopreview這樣的sublimetext2可用於FuzzyFinder或任何其他VIM文件開放插件?
- 30. 是否有任何VB.Net事件與VBA「AfterUpdate」一樣?
也http://lua-users.org/wiki/ReadOnlyTables見。並且請注意,您可以將'_ENV'和/或'_G'設置爲只讀表來模擬全局常量(在性能上需要付出一定代價)。 – finnw
這似乎是@finnw發佈的鏈接中非常重要的一個註釋:「此外,這種創建只讀表的方法**會干擾對,ipairs,next,#操作符**以及其他形式的表迭代。「 – chris