向函数返回多个值,并在Lua中分别访问它们?
如果我有一个返回多个值的函数,如何分别访问这些值?类似于table[i]的东西向函数返回多个值,并在Lua中分别访问它们?,lua,Lua,如果我有一个返回多个值的函数,如何分别访问这些值?类似于table[i]的东西 angles = function() x = function() local value = 0 return value end y = function() local value = 90 return value end z = function() local value = 18
angles = function()
x = function()
local value = 0
return value
end
y = function()
local value = 90
return value
end
z = function()
local value = 180
return value
end
return x(), y(), z()
end
例如,如果希望单独使用x
值,同时将其保留在函数angles
中,就会出现问题
print(????)
在这方面,wish函数的工作方式类似于表,因此我可以键入类似于print(angles.x)
此外,我知道代码看起来确实是多余的,但实际上它是我实际使用的代码的简化版本。很抱歉,这样做没什么意义。有几种方法可以做到这一点
x, y, z= angles()
print (x,y,z)
最明显的是
local x, y, z = angles()
print(x)
如果您特别想要第一个值
local x = ( angles() )
-- `local x = angles()` would work too. Lua discards excess return values.
print(x)
或者,不太容易理解
print((angles()))
您还可以从函数返回一个表,或者使用标准模块table
将返回值打包成一个表
local vals = table.pack(angles())
print(vals[1])
有几种方法可以做到这一点 最明显的是
local x, y, z = angles()
print(x)
如果您特别想要第一个值
local x = ( angles() )
-- `local x = angles()` would work too. Lua discards excess return values.
print(x)
或者,不太容易理解
print((angles()))
您还可以从函数返回一个表,或者使用标准模块table
将返回值打包成一个表
local vals = table.pack(angles())
print(vals[1])
另一种单独访问它们(正如问题措辞所暗示的)而不是一次性访问它们的方式是:
print((select(1,angles())))
print((select(2,angles())))
print((select(3,angles())))
输出:
0
90
180
select()
call需要放在括号中,以便返回单个条目,而不是给定偏移量后的全部条目。另一种单独访问条目(如问题措辞所示)而不是一次访问所有条目的方法是:
print((select(1,angles())))
print((select(2,angles())))
print((select(3,angles())))
输出:
0
90
180
select()
call需要放在括号中,以便返回单个条目,而不是给定偏移量后的全部条目。请注意,x
、y
和z
将是全局函数,可以从外部角度调用。您可能应该将其声明为本地。如果使用“function funcName()…end”表单,您的函数定义将更具可读性。再见,谢谢。我确实在我的实际代码中使它们成为本地的,而且我从来没有真正确定哪种风格适合函数中的函数。我一直看到事情的处理方式不同,我经常在这些事情上产生内部冲突。角度实际上也在另一个函数中,但最重要的是您建议的格式。感谢您的建议。请注意,x
、y
和z
将是全局函数,可从外部角度调用。您可能应该将其声明为本地。如果使用“function funcName()…end”表单,您的函数定义将更具可读性。再见,谢谢。我确实在我的实际代码中使它们成为本地的,而且我从来没有真正确定哪种风格适合函数中的函数。我一直看到事情的处理方式不同,我经常在这些事情上产生内部冲突。角度实际上也在另一个函数中,但最重要的是您建议的格式。谢谢你的建议。第一个选择,也是由yuk提出的,似乎是最简单的,解决了我的问题。谢谢。第一个选择,也是由yuk提出的,似乎是最简单的,解决了我的问题。谢谢