我正在尋找lua中的庫/函數,它允許您使用自定義變量類型(甚至可以使用「類型」方法將其檢測爲自定義類型)。我正在嘗試製作一個具有自定義類型「json」的json編碼器/解碼器。我想要一個可以在盧阿獨自完成的解決方案。自定義變量類型Lua
5
A
回答
9
您不能創建新的Lua類型,但可以使用元表和表來模仿他們的創建。例如:
local frobnicator_metatable = {}
frobnicator_metatable.__index = frobnicator_metatable
function frobnicator_metatable.ToString(self)
return "Frobnicator object\n"
.. " field1 = " .. tostring(self.field1) .. "\n"
.. " field2 = " .. tostring(self.field2)
end
local function NewFrobnicator(arg1, arg2)
local obj = { field1 = arg1, field2 = arg2 }
return setmetatable(obj, frobnicator_metatable)
end
local original_type = type -- saves `type` function
-- monkey patch type function
type = function(obj)
local otype = original_type(obj)
if otype == "table" and getmetatable(obj) == frobnicator_metatable then
return "frobnicator"
end
return otype
end
local x = NewFrobnicator()
local y = NewFrobnicator(1, "hello")
print(x)
print(y)
print("----")
print("The type of x is: " .. type(x))
print("The type of y is: " .. type(y))
print("----")
print(x:ToString())
print(y:ToString())
print("----")
print(type("hello!")) -- just to see it works as usual
print(type({})) -- just to see it works as usual
輸出:
table: 004649D0 table: 004649F8 ---- The type of x is: frobnicator The type of y is: frobnicator ---- Frobnicator object field1 = nil field2 = nil Frobnicator object field1 = 1 field2 = hello ---- string table
當然的例子是簡單和有更多的東西,說Lua中面向對象的編程。您可能會發現以下參考有用:
- Lua WIKI OOP index page。
- Lua WIKI page: Object Orientation Tutorial。
- Chapter on OOP of Programming in Lua。這是第一本書的版本,所以它專注於Lua 5.0,但核心內容仍然適用。
5
你所要求的是不可能的,甚至不用C API。在Lua中只有內建類型,沒有辦法增加更多。然而,使用metamethods和表格可以製作(函數創建)表格,它們可以在非常接近的地方靠近其他語言的自定義類型/類別。例如,請參閱Programming in Lua: Object-Oriented Programming(但請記住,本書是爲Lua 5.0編寫的,因此某些細節可能已更改)。
相關問題
- 1. LUA變量類型無
- 2. Activiti自定義變量類型問題
- 3. __declspec(dllexport)自定義類型變量
- 4. 重新定義Lua中的變量類型
- 5. 自定義向量類型
- 6. 未定義變量類型(自動全局變量)
- 7. 定義自定義類型變量 - >複製自定義類型定義數組 - Delphi XE3
- 8. 將自定義類型添加到變量類型int?
- 9. 使用變量類型定義另一個變量類型
- 10. C#類變量的定義類型
- 11. 如何使用自定義類作爲Iterator的類型變量?
- 12. 即使定義了變量,變量也沒有類類型
- 13. 自定義變量
- 14. 如何用Codable類型定義變量?
- 15. Javascript類型錯誤變量未定義
- 16. 類型錯誤,變量未定義
- 17. 在Python中定義強類型變量
- 18. 在groovy中定義變量類型
- 19. Javascript類型錯誤:變量未定義
- 20. Netbeans中定義的變量類型PHP
- 21. 未定義變量的用法類型
- 22. 的類型定義枚舉變量
- 23. 類型變量的定義和參數
- 24. Lua如何創建可用於變量的自定義函數?
- 25. C++自定義類型矢量優化
- 26. 自定義類型
- 27. Lua中的高效自定義數據類型
- 28. symfony中的自定義類變量
- 29. Java Bean中的自定義類變量
- 30. 具有自定義標量類型的GraphQL.js突變
對於你的type()函數,我通常在描述classname的metatable中實現一個__type字段。然後type對於所有類都將是一個有用的值。 – Zeksie
@Zeksie是的,這絕對是一種選擇。正如我所說,在Lua中有更多關於OOP的說法。 –
您可以製作一個可以製作自定義變量類型的函數嗎?例如:'jsonCode = {「json text here」} varType(jsonCode,「json」)'會簡單地用'json''自定義類型返回'jsonCode'。 'tostring(jsonCode)'只會返回'jsonCode [1]'(在這種情況下,它將等於'「json text here」')。不用費心去實現你在這裏的2值系統,我只會在具有1值的表格中使用它。 – tupperkion