【问题标题】:Lua spread operator on an array数组上的 Lua 扩展运算符
【发布时间】:2018-11-01 20:16:51
【问题描述】:

当你将变量传递给函数时,lua 是否有扩展运算符?

例如,我有一个数组a,我想将它传递给另一个函数,比如string.format。如果我只是做string.format(a),那么我会得到 ​​p>

bad argument #1 to 'format' (string expected, got table)

我尝试local f, e = pcall(string.format, t) 没有任何运气。

【问题讨论】:

  • 看起来你想要研究的是可变参数。 string.format 接受一个参数,一个字符串类型。除非您为此创建自己的功能,否则您可能会遇到问题。我举了一个例子,但不确定它是否是你要找的。​​span>
  • 基本上它所做的就是创建一个函数,将每个元素(无论类型如何)连接成一个字符串值。不是很漂亮,但适用于表迭代。以及其他任何事情。字符串、数字、列表。
  • @JamesWhyte 我的意思是你可以做string.format('Hello %s', 'there') 会返回Hello there
  • @JamesWhyte 我基本上有一个记录器可以做到这一点;将复杂对象类型转换为字符串。但我也希望能够格式化它们。所以我可以做logger.info('User with id %s is %s', userId, table)
  • 我做了一个可能值得一看的答案?我了解到字符串格式会增加 args 的界限,因为您拥有的 %s 越多。你可以做的是像local paramLength = #t这样的东西,然后遍历一个变量,这个变量是你的参数来连接更多的字符串。

标签: arrays lua spread


【解决方案1】:

库沙。我正在修补并偶然发现了一个您可能会感兴趣的功能。

在 Lua 5.1 版本中,unpack 可作为全局函数使用。在 5.2 中,他们将其移至 table.unpack,这更有意义。您可以使用类似以下的方式调用此函数。 string.format 只接受单个字符串除非您在格式参数中添加更多内容

-- Your comment to my question just made me realize you can totally do it with unpack.
t = {"One", "Two", "Three"};
string.format("%s %s %s", table.unpack(t)); -- One Two Three

-- With your implementation,
-- I believe you might need to increase the length of your args though.
local f = "Your table contains ";
for i = 1, #t do
    f.." %s";
end
string.format(f, table.unpack(t));

【讨论】:

  • 谢谢,不幸的是,这并没有按照我想要的方式工作。让我更新一下我的问题。
  • 忽略,我有错字!谢谢!
  • 哦,谢天谢地!我的心猛地一跳,以为我误会了你。祝你的脚本好运,我的朋友。并感谢您的标记! :D
猜你喜欢
  • 1970-01-01
  • 2017-03-17
  • 2018-12-21
  • 2018-02-16
  • 1970-01-01
  • 2016-06-12
  • 2017-03-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多