【问题标题】:Some operators are not allowed by LuaLua 不允许某些运算符
【发布时间】:2015-04-25 07:19:42
【问题描述】:

在我的 C++ 项目中使用 Lua 实现时遇到了一个非常奇怪的问题。出于某种原因,它不允许执行包含 #:%(以及更多、不太重要)等运算符的脚本。

在结果中...

我需要使用for i = 1, table.getn(tbl) do 而不是for i = 1, #tbl do

我需要使用string.gsub(str, [..]) 而不是str:gsub([..])

等等...寻找解决方法真的很烦人。

我的第一个想法是编码。虽然我尝试了多种常见的编码,但都没有奏效。

我遇到的错误:

当使用str:gsub([..]) 而不是string.gsub(str, [..]) 时:

attempt to index global `str' (a string value)

当使用#tbl 而不是table.getn(tbl) 时:

unexpected symbol near `#'

可能是什么问题?我会感谢每一个解决方案,因为我没有想法。


规格

Lua 版本:

#define LUA_VERSION "Lua 5.0.3"

C++ 11, FreeBSD 10

【问题讨论】:

  • % 不起作用怎么办?
  • @EtanReisner 它根本不起作用。例如。在做a % 2 == 0 时,我需要解决这个问题(这里的这个人有类似的问题stackoverflow.com/questions/9695697/…)。顺便提一句。更新了我的问题并添加了我要返回的错误。
  • % operator 是 Lua 中相对较新的新增功能,在 5.1 中添加。
  • 所以我有我的问题。看来我需要简单地更新 Lua 以使一切正常。
  • 或者您可以编写不依赖于较新功能的代码。顺便说一句,问题不是 characters 而是运营商。 (例如,cmets 和字符串文字支持所有这些字符。)您可能需要更新您的问题以使其更清晰。

标签: c++ c++11 lua symbols


【解决方案1】:

The length operator 是 lua 5.1 添加的。它在 lua 5.0 中不存在。

类似地,默认的字符串元表似乎是 lua 5.1 添加的。

比较luaopen_string 的lua 5.0 实现与luaopen_string 的lua 5.1 实现。

同样(再次)模运算也是 5.1 的加法。比较5.0 manual`5.1 manual1Arithmetic Operators 部分。

5.1 手册部分包含运算符的定义,因此您可以自己实现它(或使用您需要的任何其他定义)。

【讨论】:

  • 谢谢。然后我会更新我的 Lua 版本:-)
猜你喜欢
  • 2010-09-10
  • 1970-01-01
  • 2012-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-27
  • 1970-01-01
相关资源
最近更新 更多