gpt4 book ai didi

未调用 Lua 元方法

转载 作者:行者123 更新时间:2023-12-04 15:56:55 24 4
gpt4 key购买 nike

我对 Lua 有点陌生(还没有真正做太多事情),我正试图将我的注意力集中在元表上。我以前让他们工作,但现在(几个月后)我遇到了一些非常奇怪的事情。

这个脚本在运行时应该打印什么?

__mt = {}

__mt.__index = function(table, key)
print("In __index")
return 99
end

test = {}
test.x = 5

setmetatable(test, __mt)

print(test.x)

就个人而言,我希望它打印“In __index”(来自元方法),然后是 99。但是,每当我运行它时,我都会得到 5。我所做的任何事情都无法让索引元方法运行。它就像我使用 rawget() 一样。

奇怪的是,添加

print(getmetatable(test).__index(test, "x"))

会做正确的事。元表在那里,__index() 是正确的,只是没有被调用。

这是一个错误还是我只是在做一些愚蠢的事情?我说不清楚。

最佳答案

只有当键 x 不存在时才会调用称为 __index 的元方法(在旧术语中也称为 fallback)/strong>,当您访问 t.x 时。试试 print(t.y) 吧!

添加:是的,使用代理表。

function doubletable(T)
local store = T or {}
local mt = {}
mt.__index = function (t, k) return store[k] and 2*store[k] end
mt.__newindex = store
return setmetatable({}, mt)
end

t = doubletable({a=1, b=3})
t.c = 7
print(t.a, t.b, t.c)
-- output: 2 6 14

关于未调用 Lua 元方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3122122/

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