Lua中奇怪的回复声明

时间:2016-02-21 22:45:03

标签: lua

我在Github上浏览一些Lua代码,在那里我看到了return Memory.value("game", "textbox") == 1等几个语句 这是“相等”return if value ==1还是if value == 1 return true, else return false

3 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:5)

你的问题是你知道Perl。不,它不像Perl,其中“if”和类似语句的条件可以遵循该语句。

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

此语句返回truefalse

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

答案 2 :(得分:5)

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

我将进入逻辑方面。

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

这不仅限于==任何比较运算符(~=<=>=<,{ {1}})将完成完全相同的事情

>and的工作方式略有不同。它们不会返回true / false。以下是他们的行为方式:

or:如果a为真(无误或无)返回b

,这基本上计算为

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

你可以想象,像return a or b这样的东西意味着

return a and b or c

因此if a then if b then return b else return c end else return c end 相当于return a and b or c

为了完成,return ((a and b) or c)只需对其进行求值并将其反转,所以如果它为false / nil则返回true,否则返回false。