Lua 中的 a, b = foo() 是什么意思?

我在网上搜索了一下,但没有找到解释。

以下内容是什么意思?

Local a,b = foo()

为什么有两个变量?

这是不是意味着

Local a= foo()

以及

Local b= foo()

也是同样的意思?还是其他的意思?

请有经验的人提供使用示例。

点赞
用户1531124
用户1531124

这意味着 foo 返回 两个 值,它们会存储到 a 和 b 中!因此,foo 只被调用一次,但是两个结果被存储到了两个变量中。

有关更多信息,请参见 https://www.lua.org/pil/5.1.html

语法有点奇怪,其他语言会要求使用括号,如下所示:

( a, b ) = foo()

Kotlin 也允许这样做。他们称之为解构。

2018-12-16 05:15:36
用户5287638
用户5287638

在 Lua 中,函数可以返回多个值。例如,这个函数返回两个值:

function returnThreeAndFive()
    return 3, 5
end

你可以使用你描述的语法将函数调用的结果加载到变量中。 (但是,如果你想要局部变量,你应该使用小写字母“l”而不是大写字母“L”。)

local a, b = returnThreeAndFive()
print(a, b) -- 打印 "3    5"

如果使用的变量比函数返回的值多,则 Lua 会用 nil 填充这些变量。

local a, b, c = returnThreeAndFive()
print(a, b, c) -- 打印 "3    5    nil"

反过来,如果函数返回的值比你使用的变量多,则你只捕获你放入变量中的值。

local a = returnThreeAndFive()
print(a) -- 打印 "3"
2018-12-16 05:43:11