Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
向函数返回多个值,并在Lua中分别访问它们?_Lua - Fatal编程技术网

向函数返回多个值,并在Lua中分别访问它们?

向函数返回多个值,并在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

如果我有一个返回多个值的函数,如何分别访问这些值?类似于table[i]的东西

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提出的,似乎是最简单的,解决了我的问题。谢谢