【问题标题】:Getting multiple values from a function without creating a variables in LUA从函数中获取多个值而不在 LUA 中创建变量
【发布时间】:2020-04-10 06:32:27
【问题描述】:

有没有什么方法可以在不为函数创建变量的情况下从函数中获取多个值?

local major, minor, revision, codename = love.getVersion() -- Get current LÖVE version as a string.

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

get( love.getVersion(), 0 ) -- Will return the first value (major).

我在某处读到可以使用方括号并尝试过love.getVersion()[1],但它显示“尝试索引一个数值。”

【问题讨论】:

  • 我认为您可以对不需要的值使用下划线。如local major, _, _, _ = love.getVersion()
  • local minor = select(2, love.getVersion())

标签: lua love2d


【解决方案1】:

为了举例,我们假设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

如有疑问 - Reference Manual - 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, _, _)。

【讨论】:

  • 太棒了!我什至没想到会有更详细的答案。绝对尊重!
  • 顺便说一下,table wrapping方法很慢。
  • @younyokel,哦,是的,但它仍然是一个有效的选择:)
【解决方案2】:

这里是函数签名:[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'])

【讨论】:

    猜你喜欢
    • 2020-01-11
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-25
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    相关资源
    最近更新 更多