gpt4 book ai didi

lua - Lua中表和元表的区别

转载 作者:行者123 更新时间:2023-12-03 18:09:28 25 4
gpt4 key购买 nike

Corona 中的表和元表有什么区别?元表的类型有哪些?我如何以及在哪里可以使用它们?使用表和元表的主要目的是什么?

最佳答案

Lua 中的表是可用于创建动态结构化数据的主要数据类型。其他语言有数组、列表、字典(键值存储),在 Lua 中你只有表。您可以对基本表执行的唯一操作是使用 tab[key] 索引和存储值。语法,即:

local tab = {}
tab['key1'] = 'Hello' -- storing a value using a string key
tab.key2 = 'World' -- this is syntax sugar, equivalent to previous
print(tab.key1, tab['key2']) -- indexing, the syntax is interchangable

您不能对基本表做任何其他事情,例如添加它们:
local v1={x=0,y=0}
local v2={x=1,y=1}
print(v1+v2)
--> stdin:1: attempt to perform arithmetic on local 'v1' (a table value)

元表允许您修改表的行为,指定添加、相乘、连接 ( .. ) 等表时应执行的操作。元表只是一个表,其中包含具有特殊键的函数,也称为元方法.您可以使用 setmetatable() 将元表分配给表.例如:
local Vector = {} -- this will be the metatable for vectors

function Vector.__add(v1, v2) -- what to do when vectors are added
-- create a new table and assign it a Vector metatable
return setmetatable({x=v1.x+v2.x, y=v1.y+v2.y}, Vector)
end
function Vector.__tostring(v) -- how a vector should be displayed
-- this is used by tostring() and print()
return '{x=' .. v.x .. ',y=' .. v.y .. '}'
end

local v1 = setmetatable({x=1, y=2}, Vector)
local v2 = setmetatable({x=3, y=4}, Vector)

-- vectors are added and the resulting vector is printed
print(v1 + v2) --> {x=4,y=6}

如果你想更好地理解元表,你绝对应该 read the Programming in Lua chapter on metatables .

关于lua - Lua中表和元表的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10891957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com