Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Lua5.x中,什么是Lua4.0;“可获取”;及;“可设置”;用于设置标记方法(如元方法)的事件?_Lua_Meta Method - Fatal编程技术网

在Lua5.x中,什么是Lua4.0;“可获取”;及;“可设置”;用于设置标记方法(如元方法)的事件?

在Lua5.x中,什么是Lua4.0;“可获取”;及;“可设置”;用于设置标记方法(如元方法)的事件?,lua,meta-method,Lua,Meta Method,在Lua4.0中,tagmethod“gettable”允许拦截对表元素的访问。 每次尝试访问表元素时,都会调用“gettable”事件的链接tagmethod: local t = { a=123 } local tg = newtag() settagmethod(tg, "gettable", function(tbl, idx) print(tbl, idx) return rawget(tbl, idx) end ) settag(t, tg) print(t.a) --

在Lua4.0中,tagmethod“gettable”允许拦截对表元素的访问。 每次尝试访问表元素时,都会调用“gettable”事件的链接tagmethod:

local t = { a=123 }
local tg = newtag()
settagmethod(tg, "gettable", 
  function(tbl, idx) print(tbl, idx) return rawget(tbl, idx) end )
settag(t, tg)
print(t.a)    -- <-- prints table: 0x7f9a8250acc0   a
              -- <-- then prints t.a value
localt={a=123}
局部tg=newtag()
settagmethod(tg,“gettable”,
函数(tbl,idx)打印(tbl,idx)返回原始数据(tbl,idx)结束
settag(t,tg)

打印(t.a)--在Lua5.x中,您需要Egor是正确的。我的答案(现已删除)不正确
\u索引
仅在调用方尝试访问
nil
元素时调用
t[data]
我的答案错了!实际上是
nil
。我已经定义了
t.data
t.data
等同于
t[“data”]
,而不是
t[data]
。但这就是为什么需要代理表的原因:如果可用于访问的表完全为空,那么_index和_newindex metamethods将始终拦截。然后这些方法可以访问其他不可见的表。@brianolive,是的,我找到了为什么uu index event metamethod不使用tbl[data],而是使用tbl.data.@Egor Skriptunoff,我使用了一个代理表,这是一个更简单的解决方案,因为Lua5.x中不存在“settable”事件。。。。在4.0中非常有用。无论如何,我在4.01中使用了一个代理表来完成另一段代码。谢谢。在Lua5.x中,你需要Egor是对的。我的答案(现已删除)不正确
\u索引
仅在调用方尝试访问
nil
元素时调用
t[data]
我的答案错了!实际上是
nil
。我已经定义了
t.data
t.data
等同于
t[“data”]
,而不是
t[data]
。但这就是为什么需要代理表的原因:如果可用于访问的表完全为空,那么_index和_newindex metamethods将始终拦截。然后这些方法可以访问其他不可见的表。@brianolive,是的,我找到了为什么uu index event metamethod不使用tbl[data],而是使用tbl.data.@Egor Skriptunoff,我使用了一个代理表,这是一个更简单的解决方案,因为Lua5.x中不存在“settable”事件。。。。在4.0中非常有用。无论如何,我在4.01中使用了一个代理表来完成另一段代码。谢谢