Lua 中奇怪的返回语句

我在 Github 上浏览一些 Lua 代码时,看到了几个类似于

return Memory.value("game", "textbox") == 1

的语句。这和下面哪个语句相等呢?

if Memory.value("game", "textbox") == 1 then
    return
end

或者是这个呢?

if Memory.value("game", "textbox") == 1 then
    return true
else
    return false
end
点赞
用户5376375
用户5376375

return 语句期望一个表达式作为其参数。也就是说,如果你写了 return expression,那么 expression 的求值结果将被返回。

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

你可以很容易地将给出的语句写成:

if (Memory.value("game", "textbox") == 1) then
    return true
else
    return false
end

但由于这在逻辑上是多余的,你应该避免编写这段代码,而要使用你提供的一行代码。

2016-02-21 23:14:21
用户2226988
用户2226988

你的问题表明你了解 Perl。不,Lua 不像 Perl,不支持在语句后面使用 `if` 和类似语句的条件。

return 期待零个或多个返回值。一个函数可以返回任意长度的列表。它也可以有任意数量的返回语句,并且它们不需要返回相同长度或含义的列表。所以,函数的文档非常重要。可以参考 load 作为示例。

此语句返回 truefalse

它将 Memory 引用的值作为表对待,用 "value" 索引它,调用结果值作为带两个字符串参数的函数,并将函数调用的结果与值 1 进行比较。

2016-02-21 23:20:11
用户3979429
用户3979429

return 是一个关键字,它没有条件作为参数,而是一个表达式。如果你明确地声明了 return,它就会返回。但它会评估它的参数,这就是逻辑方面发挥作用的时候。

我将进入逻辑方面。

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

这不仅限于 ==任何比较运算符( ~=, <=, >=, <, >)都会做完全相同的事情

然而 andor 的工作方式有点不同。它们不会返回 true/false。这里是它们的行为方式:

return a and b:这基本上等同于 如果 a 是 true(既不是 false 也不是 nil),则返回 b

return a or b:这基本上等同于 如果 a 是 true(既不是 false 也不是 nil),则返回 a,否则返回 b

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

如果 a 那么
    如果 b 那么
        返回 b
    否则
        返回 c
    结束
否则
    返回 c
结束

因此 return a and b or c 等同于 return ((a and b) or c)

为了完整起见,not 只是_评估它并取反它_,因此如果它是 false/nil,它就返回 true,否则返回 false。

2016-02-22 02:41:55