流行的脚本语言允许使用像这样的表达式
true*5>10.3*false
其中true为1且false为0,除0之外的任何数字也为真
你能在卢阿做同样的事吗?
目前我正在将所有操作数包装到一个表中,并使用像__sub这样的元方法来启用所述功能,但它会生成详细的代码和开销
答案 0 :(得分:1)
是。请参阅下面的代码。您可以为其他算术运算添加类似的元方法。
static
答案 1 :(得分:0)
一种方法 - 虽然不如"正确的方式"正如lhf所述 - 鉴于
,可能对你有所帮助目前我将所有操作数包装到一个表中,并使用像
__sub
这样的元方法来启用所述功能,但它会生成详细的代码和开销
和
我无权访问我的环境中的调试表。
具有强制价值的功能,例如N
,B
,...
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算术),你就会确切知道需要包装的内容,其余的可以保持打开状态。
在任何一种情况下,这都可能比在表格中包装内容更快/更易读。