如何在Lua基本类型之间启用算术?

时间:2017-07-01 09:06:24

标签: lua

流行的脚本语言允许使用像这样的表达式

true*5>10.3*false

其中true为1且false为0,除0之外的任何数字也为真

你能在卢阿做同样的事吗?

目前我正在将所有操作数包装到一个表中,并使用像__sub这样的元方法来启用所述功能,但它会生成详细的代码和开销

2 个答案:

答案 0 :(得分:1)

是。请参阅下面的代码。您可以为其他算术运算添加类似的元方法。

static

答案 1 :(得分:0)

一种方法 - 虽然不如"正确的方式"正如lhf所述 - 鉴于

,可能对你有所帮助
  

目前我将所有操作数包装到一个表中,并使用像__sub这样的元方法来启用所述功能,但它会生成详细的代码和开销

  

我无权访问我的环境中的调试表。

具有强制价值的功能,例如NB,...

function N( x )
   local ty = type( x )
   if ty == "number" then  return x  end
   if ty == "boolean" then  return x and 1 or 0  end
   -- and so on for other types you need to handle
end

然后你说B(v) and (N(x)*N(y) > N(z)+N(w))或类似的东西。虽然还有很多函数调用,但它可能比在表格中包装所有内容更快(取决于你执行包装的方式/位置),这也可能更具可读性。

如果您正在编写类似于库的代码,那么在顶层执行强制操作(在公开的库函数中,在接收值之后/您通常会进行类型检查的情况下)就意味着您需要这样做。 ll你的图书馆里面总是有正确类型的值,并且不需要这些强制函数。所以它基本上只是在入口点和正常代码之后进行类型检查/自动强制。

如果你为了方便在代码中使用它(比如,将比较结果解释为0或1算术),你就会确切知道需要包装的内容,其余的可以保持打开状态。

在任何一种情况下,这都可能比在表格中包装内容更快/更易读。