如何在Lua代码中创建新的数据类型?

我已经搜索了网络,但没有教程能够让我真正理解,所以我需要简要说明:

我想在C语言编译器中为lua创建新的数据类型,以创建像以下这样的值:

pos1 = Vector3.new(5,5,4)-表示3D位置

pos2 = CFrame.new(4,2,1)* CFrame.Angles(math.rad40),math.rad20),math.rad5))-表示3D位置和旋转

这些是我通常在一个叫做Roblox的游戏引擎上使用的一些代码行。我想在Roblox之外再创造它们。

点赞
用户2303714
用户2303714

本地矢量3 = {} setmetatable(本地矢量3,{ __index = 本地矢量3; __add = function(a,b) return Vector3:new(a.x+b.x,a.y+b.y,a.z+b.z); end; __tostring = function(a) return "("..a.x..','..a.y..','..a.z..")" end }); --此元表定义具有此元表的表的重载 function Vector3:new(x,y,z) -- Vector3隐含赋给变量 self return setmetatable({x=x or 0,y=y or 0,z=z or 0},getmetatable(self)); #创建一个新的表并给它Vector3的元表 end

Vec1 = Vector3:new(1,2,3) Vec2 = Vector3:new(0,1,1) print(Vec1+Vec2)


输出

(1,3,4)

2013-05-07 04:49:50
用户4544582
用户4544582

metatablesloadstring 是我在类似这样的问题上所能想到的最近似的方法:

loadstring([=[function ]=] .. customtype .. [=[.new(...)
return loadstring( [[function() return setmetatable( {...} , {__index = function() return ]] .. ... .. [[ ) end )() end]] ]=] )()

这只是我想说的要点。我很抱歉这不是很整洁和完美,但至少可以作为参考(昨晚我睡得不多)。

2015-06-12 23:50:23