问题标签 [meta-method]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
911 浏览

lua - Lua __eq 在具有不同元表的表上

我在这个网站http://lua-users.org/wiki/MetamethodsTutorial上找到了以下引用:

当在两个表上使用 == 运算符时调用 __eq,引用相等性检查失败,并且两个表具有相同的 __eq 元方法 (!)。

现在我用 Lua 5.3.5 对其进行了测试,这根本不是我观察到的:

这是我测试的代码。

看起来它和比较运算符做的事情一样,它只是获取左表并使用它的元方法。

这在最近的 Lua 版本中是否发生了变化,还是我的测试出错了?

谢谢你的帮助。

0 投票
2 回答
147 浏览

lua - 将 __call 元方法设为迭代器

我正在尝试从其他应用程序的脚本中模拟某些功能的执行。该应用程序具有包含函数的 Lua 库list(),它返回表,其中键是字符串 UUID,值只是字符串,例如local tbl = { "0000..-0000-..." = "someString", etc... }. 该表可以在 for 循环中迭代,例如

那么问题来了,我如何实现 __call 元方法以作为 pair() 或 next() 等工作?

谢谢

0 投票
1 回答
55 浏览

lua - 这些是什么类型的元方法,它们为什么存在以及它们是如何创建的

大家好!

我一直在研究元方法,我意识到一些奇怪的事情!

我已经知道 Lua 文档中以__add__index__newindex等形式呈现的所有元方法……但我在论坛和问题中看到人们使用像__ev__close、之类的元方法__group,而且我从未在其他任何地方看到使用或存在这些元方法在任何文档中。

我的问题是,这些元方法存在吗?如果没有,它们是如何创建的?为什么人们创建这个元方法?

无论如何,感谢您的关注

0 投票
0 回答
41 浏览

lua - 赋值突然消失了,有什么解释吗?

1.我已经赋值vN[i]打印了,还是有10个。但是为什么我打印的时候t[0],我得到了nil

2.为什么__newindex不放循环元方法不起作用?(如果我把它t[0] = 10放在while循环外面,循环里面的元方法也会停止工作)

0 投票
2 回答
225 浏览

indexing - 如何让 __index 和 __newindex 检测 table.index

我还是一个元表的新手,有些东西让我感到困惑

当我在我的元表中使用__index和之类__newindex的元方法时,它们仅在我调用表的元素时被调用,如下所示:

但是当我如下调用表的元素时,不会调用这两个元方法:

我的问题是,有什么方法可以table.index同时调用这两个元方法?还是只table[index]工作?

0 投票
2 回答
84 浏览

lua - 有没有办法知道是否在lua中的数组中添加或删除了一个键?

有没有办法做到这一点。我和某人讨论过这个问题,他们说我不能只使用元方法,还可以使用代理。我对如何使这项工作有些困惑。任何人都可以帮忙吗?

谢谢

0 投票
1 回答
67 浏览

c# - 是否可以向类型/类添加自定义方法?

就像标题中问的那样,假设我想为table类型添加一个自定义方法,比如说table:printContent(),Lua 中有什么方法可以实现这一点吗?我的意思是,纯粹的,Lua。例如,在 C# 中,您可以使用扩展来做到这一点:

现在也有可能,只是在 Lua 中?

启发我的问题(这个问题并没有告诉我我想学什么,是的,我想要 OOP,如果我想在 Lua 中进行修改)

如何将方法添加到表类型?

0 投票
1 回答
42 浏览

lua - __pairs() 和 __ipairs() 元方法根本不起作用

我不知道我做错了什么。基本上代码如下所示:

__ipairs() 也是如此。根本不调用重载的元方法 - 没有控制台输出,根本没有自定义迭代。相反,我得到的结果就像我遍历没有元表的表一样。怎么了?