问题标签 [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 投票
0 回答
326 浏览

lua - 打印所有元表内容

我有表:

我有肮脏但有效的代码:

它的电报机器人。当按名称、日期和时间询问农场时 - 没关系。

我的麻烦就在 else 语句附近。我想向机器人询问农场和日期。它应该返回类似“在 16-6-2014,在农场“knk”将是 2 个农场。在 17 - 2 个代理。在 18 - 3 个代理”之类的列表

简单的 table.concat 对我不起作用。

0 投票
1 回答
424 浏览

lua - 创建特定用户类型的新实例

我正在使用 tolua++ 自动将 C++ 类型公开给 Lua。似乎当我暴露某种类型时,例如

tolua 所做的(至少在我看来是这样的)是向 lua 环境添加一个新的元表(在这种情况下,它只会被称为TestComponent)使用一些常规的元方法,例如__add, __lt, 以及__index,__newindex等。它还有一些自定义函数(称为.setand .get),当您获取或设置结构/类的某些成员时,它们似乎会被使用。这里的TestComponent 的类型似乎只是“table”。

但是,对于像上面这样的简单结构定义,它似乎缺少的是创建类型的新实例的函数/方法TestComponent,例如

那么,问题是,如何创建这种类型的新实例并将其分配给变量?例如,将它交给一个需要 type 参数的函数TestComponent

0 投票
1 回答
772 浏览

c++ - 从 C++ 调用 Lua 函数

我正在使用最新版本的 LuaJit,需要一些帮助才能入门。我需要的是让一堆函数暴露给 Lua 环境,这些函数可以在脚本中被覆盖以运行用户提供的代码,然后在 C++ 中的设置事件期间调用这些函数

例如,当用户按下 TAB 键时,它将调用 lua 环境中的函数,例如 OnScoreboardOpen(),当用户释放 TAB 键时,它将调用相应的函数 OnScoreboardClose(),这些函数可以附加到元方法比如游戏或GM。

有人可以指点我一些教程或示例代码来展示如何实现这一点吗?非常感谢您的宝贵时间。

0 投票
2 回答
1565 浏览

syntax - 我可以自己覆盖 Lua 表的返回值吗?

在没有键的情况下引用表时,是否有可能返回特定值而不是对自身的引用?

假设我有下表:

在 Lua 中,我可以很容易地引用“person.name”、“person.level”或“person.age”并获得预期的值。但是,在某些情况下,我可能只想引用“person”,而不是获取“table:”,我想返回“person.name”的值。

换句话说,我希望 person.x(或 person[x])从表中返回适当的条目,但没有键的人返回 person.name(或 person["name"])的值。有没有我找不到的机制?

我对元表没有成功,因为 __index 仅适用于键不存在的情况。如果我把“人”放到一个单独的表中,我可以想出:

这让我可以使用 __index 进行一些特殊处理,除了我无法从 __index() 中分辨出我是否收到了对 env.person 的请求(我想返回 true_person.name)或env.person[key] (我想将 true_person 作为表返回,以便可以适当地访问“key”)。

有什么想法吗?我可以以不同的方式处理这个问题,但希望我可以沿着这些思路处理这个问题。

0 投票
1 回答
145 浏览

lua - 为什么这会导致 C 堆栈溢出?

我知道我可以通过使用来解决这个问题rawset,但我只是想知道为什么下面的代码会导致 C 堆栈溢出。

0 投票
1 回答
123 浏览

lua - 如何解决此解包问题?

我正在创建一个 Array 类,为表添加更多使用。我有一个元方法,可以让我组合两个表,例如:

Array(5) .. Array(6, 10) 应该给你 {5, 6, 10}

我知道我可以使用两个循环来做到这一点,但我正在努力使我的代码尽可能干净和高效。我遇到了解包问题。我正在尝试连接两个表,但它不包括所有值。这是我的代码和输出:

OUTPUT: 5, 6, 9 (I want it to be "5, 12, 13, 6, 9")

0 投票
1 回答
1166 浏览

lua - 将表指向 Lua 中的另一个表

有没有办法将表指向另一个表?例如:

我希望你明白我的意思..谢谢

编辑:

好的,这就是这个想法:

我正在制作一个像这样的动态功能

一切都很好,价值观有效,我们都很高兴..当参考表以这种方式改变它的价值时,问题就出现了

由于我没有通过索引(即:table[1] = 9999)来更新它,因此引用变量与真实的引用变量“不同步”,我希望你能理解 :)

编辑2:

好的,这是我的主要问题的自我工作示例

为什么当变量更新时我不能直接将它指向表格?因为我有 20 个表要更新,这样做会更容易

您可以在http://www.compileonline.com/execute_lua_online.php上运行它来了解我的意思。

对不起,如果它是一团糟,但我的英语不是最好的:D

0 投票
1 回答
1455 浏览

lua - setmetatable() 是如何工作的以及为什么在 lua 的链表中需要元表

我正在学习 Lua 的元表如何在 OOP 中工作,我对从 lua-users wiki 上的面向对象教程中阅读的代码感到困惑。有人可以帮助解释以下问题吗?谢谢。

问题1:wiki的解释:这里我们在类表中添加一个元表,该元表有__call元方法,当一个值像函数一样被调用时触发。我们让它调用类的构造函数,所以创建实例时不需要 .new 。

(1)示例中的__call是如何被调用的,所以构造函数被调用了?
(2)“cls”是指“MyClass”吗?

问题 2:以下代码中的 {} 指的是什么?

**这里是完整的代码:

0 投票
1 回答
443 浏览

lua - 使用“。”的困惑 Lua 中带有 __index 和命名空间的符号

我对使用“。”的以下两种语法感到困惑。

  1. 据我了解,__index当键不存在于表中但存在于其元表中时调用。那么为什么列表表调用__index然后将自身分配给list.__index

    /li>
  2. 是否Window.mt只是创建一个表?为什么我们需要Window = {}在这里作为命名空间?

    /li>
0 投票
2 回答
1362 浏览

lua - Lua __metatable 绕过?

我想知道是否有任何方法可以逃避 __metatable 元方法。我知道没有,但我正在尝试做这样的事情,但显然 __metatable 阻止了这种情况的发生:

我在这里要做的只是逃避 __metatable 字段,并简单地允许自己在 _G 上设置一个元表,它已经有一个。我知道这样做是不可能的,但是我想问一下还有没有机会绕过?