太升 2024-01-03 00:31 采纳率: 50%
浏览 4

Lua函数的可变长参数问题

Lua函数的可变长参数问题

function f(...)
    a = select(3,...)  -->从第三个位置开始,变量 a 对应右边变量列表的第一个参数
    print (a)
    print (select(3,...)) -->打印所有列表参数
end
f(0,1,2,3,4,5)

结果

2
2    3    4    5

为什么结果会不一样?明明都是select(3,...)

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2024-01-03 02:08
    关注

    【以下回答由 GPT 生成】

    Lua 函数中的可变长参数使用 (...) 表示,它会将函数的所有参数打包成一个表,并可以通过表的索引来访问每个参数。

    在给定的示例中,函数 f(...) 接受了一个可变长参数列表,并使用 select 函数来获取参数列表中的第三个参数。

    在第一次打印中,a = select(3, ...) 将参数列表中的第三个参数赋值给变量 a,所以打印的结果为 2。

    在第二次打印中,select(3, ...) 打印从参数列表中的第三个参数开始的所有参数,所以打印的结果为 2 3 4 5。

    这里的不一致性在于,第一次打印只打印了一个值,而第二次打印打印了多个值。这是因为在第一次打印中,将 select(3, ...) 的结果赋值给了变量 a,所以只打印了这一个值。而在第二次打印中,直接打印了 select(3, ...) 所以打印了多个值。如果要使两次打印结果一致,可以将 select(3, ...) 的结果赋值给一个变量,然后打印这个变量即可。

    针对给定的代码示例,对于不一致性的处理可以通过以下代码来实现:

    function f(...)
        a = select(3, ...)
        print(a)
    
        local args = {select(3, ...)}
        print(table.unpack(args))
    end
    f(0,1,2,3,4,5)
    

    这样,第一次打印和第二次打印都会打印 2 3 4 5。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 1月3日