如何在Lua函数中获取多个值而不创建变量

有没有办法从函数中获取几个值而不必为此创建变量?

local major, minor, revision, codename = love.getVersion() -- 获取当前LÖVE版本。

因此,我们将使用一些仅返回您需要的值的东西,而不是创建四个不同的变量(或数组)。

get( love.getVersion(), 0 ) -- 将返回第一个值(主要)。

我在某个地方读到我可以使用方括号,尝试了love.getVersion()[1]但它说“尝试对数字值进行索引”。

点赞
用户765224
用户765224

这是函数签名:[ [https://love2d.org/wiki/love.getVersion\] ](https://love2d.org/wiki/love.getVersion),它只返回多个值,如果理解为实现所要求的功能,您可以在getVersion周围包装,以便返回lua表,要么像下面这样,要么以数组格式

local function getVersion()
 local meta_data = {minor_version = "0.1", major_version = "1"}
 return meta_data
end

local res = getVersion()
print ("minor_version: ", res['minor_version'])
print ("major_version: ", res['major_version'])
2019-12-17 20:26:03
用户4567755
用户4567755

为了举例说明,假设love.getVersion()的定义如下:

function love.getVersion ()
   return 1, 2, 3, "four"
end

使用select(index,...)

如果index是数字,则select返回索引index后面的所有参数。例如:

print("A:", select(3, love.getVersion()))
local revision = select(3, love.getVersion())
print("B:", revision)

输出:

A:  3   four
B:  3

如果您有疑问,请参阅参考手册- select

使用表格包装:

您提到尝试love.getVersion()[0]。这几乎就是答案,但您首先需要将返回的值包装在一个实际的表格中:

local all_of_them = {love.getVersion()}
print("C:", all_of_them[4])

输出:

C:  four

如果您想以一行完成(符合“不创建变量”精神),还需要将表格包装在括号中:

print("D:", ({love.getVersion()})[1])

输出:

D:  1

使用_变量:

从其他语言中来,您可以使用_将不感兴趣的值赋值给它(如果一行短平的创建变量,没有人会注意到),例如:

local _, minor = love.getVersion()
print("E:", minor)

输出:

E:  2

请注意,在示例中跳过了任何跟随的_(不需要local _, minor, _, _)。

2019-12-18 10:21:24