Lua中奇怪的回复声明

Gri*_*ung 8 lua

我正在浏览Github上的一些Lua代码,在那里我看到了几个语句__CODE__.
这是"平等" __CODE__还是__CODE__

Tor*_*olz 9

return语句期望表达式作为其参数.这意味着如果您编写return expression,则expression返回评估值.

在这种特定情况下,Memory.value("game", "textbox") == 1是一个表达式,计算true返回值是否Memory.value("game", "textbox")等于1.如果Memory.value("game", "textbox")是一个不同于的值1,则表达式将计算为false,该return语句将返回.

您可以轻松地将给定的语句写为

if (Memory.value("game", "textbox") == 1) then
    return true
else
    return false
end
Run Code Online (Sandbox Code Playgroud)

但由于这在逻辑上是多余的,您可能希望避免编写此代码,而是使用您提供的一个衬垫.


Tom*_*get 5

你的问题说你知道Perl.不,它不像Perl,其中"if"和类似语句的条件可以遵循该语句.

return期望一个零个或多个返回值的列表.函数可以返回任何长度列表.它也可以有任意数量的return语句,并且它们不需要返回相同长度或含义的列表.因此,函数的文档是必不可少的.请参阅load作为示例.

该声明返回truefalse.

它将Memory引用的值视为表,使用"value"对其进行索引,将结果值作为具有两个字符串参数的函数调用,并将函数调用的结果与值1进行比较.


war*_*ing 5

return是一个关键字,并没有条件作为参数,而是一个表达式.如果你明确说明return它会返回.然而,它评估它的论点,即逻辑方面发挥作用的时候.

我将进入逻辑方面.

==是一个比较运算符,它检查它的参数是否相等.如果是这样,它返回true.因此,当在a中使用时return,return如果它们相等则将评估并返回true.

这不限于==,任何比较操作符(~=,<=,>=,<,>)会做同样的事情.

andor但是,工作方式有点不同.它们不会返回true/false.以下是他们的行为方式:

return a and b:这基本上评估a是否为真(既不是假也不是零)返回b

return a or b:这基本上转换为*如果a为真(既不是假也不是零)返回a,否则返回b

所以你可以想象,像return a and b or c手段一样

if a then
    if b then
       return b
    else
       return c
    end
else
    return c
end
Run Code Online (Sandbox Code Playgroud)

所以return a and b or c相当于return ((a and b) or c)

并且为了完成,not只需对其进行求值并将其反转,因此如果它为false/nil则返回true,否则返回false.