当我将unpack()作为lua的函数参数调用时,会发生什么情况?

新王

这是我看到的:

> function test(...)
>>  for i, v in ipairs({...}) do
>>    print(v)
>>  end
>>end

-- This is expected
> test(unpack({1,2}))
1
2
-- When I mix unpack and regular arguments
-- What happened to 2?
> test(unpack({1,2}), 3)
1
3
-- What happened to 3?
> test(unpack({}), 3)

-- When I put regular args before unpack, everything is fine:
> test(1, unpack({2, 3}))
1
2
3

当我将解压缩的参数与常规args混合时,结果很奇怪。您能解释一下幕后发生的事情吗?

小猪

我将引用Lua参考:

函数调用和vararg表达式都可以产生多个值。如果将表达式用作语句(仅可用于函数调用(请参见第2.4.6节)),则将其返回列表调整为零个元素,从而丢弃所有返回的值。如果将表达式用作表达式列表的最后一个(或唯一)元素,则不会进行任何调整(除非调用包含在括号中)。在所有其他情况下,Lua会将结果列表调整为一个元素,并丢弃除第一个元素外的所有值。

如您所见,解压缩调用减少为一个返回值,因为它既不是传递给测试的表达式列表中的最后一个表达式,也不是唯一的表达式:

test(unpack({1,2}), 3)

在另一种情况下,答案很简单:

test(unpack({}), 3)

传递给测试的第一个值为nil。为此for i, v in ipairs({...}) do end会做什么作为你的表的第一个值nil作为unpack({})回报nil

一对(t)

返回三个值(迭代器函数,表t和0),以便构造

 for i,v in ipairs(t) do body end

将遍历键-值对(1,t [1]),(2,t [2]),...,直到第一个nil值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

当我以`even`作为生成器函数调用`even(3)`时会发生什么情况?

来自分类Dev

将函数用作参数时会发生什么情况?

来自分类Dev

当我们将int参数传递给重载方法时,会发生什么情况,该重载方法将float作为一个方法的参数,将另一个作为double参数

来自分类Dev

iOS:当我从其他类调用重写的方法时,会发生什么情况

来自分类Dev

当我们将jar提交给风暴集群时会发生什么情况?

来自分类Dev

将数组作为参数传递时会发生什么情况?

来自分类Dev

如果将很少的参数传递给Shell函数,会发生什么情况?

来自分类Dev

当我在此函数调用中使用括号使它的行为有所不同时,会发生什么情况?

来自分类Dev

当我在嵌套的 React 组件中调用作为 props 传递的函数时会发生什么?

来自分类Dev

如果我不在扩展类中调用可选的超级方法或构造函数,会发生什么情况?

来自分类Dev

如果我将函数主体而不是函数名称传递给setTimeout,会发生什么情况?

来自分类Dev

当我从RAM运行持久性存储实时USB时会发生什么情况?

来自分类Dev

当我在shell中执行文件时,会发生什么情况?

来自分类Dev

当我离开INT_MAX以外时会发生什么情况?

来自分类Dev

当我使用Ctrl + c终止Python脚本时,内部会发生什么情况?

来自分类Dev

当我在shell中执行文件时,会发生什么情况?

来自分类Dev

当我从RAM运行持久性存储实时USB时会发生什么情况?

来自分类Dev

当我使用Ctrl + c终止Python脚本时,内部会发生什么情况?

来自分类Dev

当我在依赖jar的项目中进行更改时会发生什么情况?

来自分类Dev

以Express应用程序作为参数评估require(“ http”)。Server()时会发生什么情况?

来自分类Dev

如果从类文件中删除超级构造函数调用,会发生什么情况?

来自分类Dev

Matlab OOP:当在数组属性上调用get函数时,会发生什么情况?

来自分类Dev

如果我在已删除的实体上调用EF Reload,会发生什么情况?

来自分类Dev

调用exec()时,线程会发生什么情况?

来自分类Dev

如果我在PHP函数的末尾不包含“返回”,会发生什么情况?

来自分类Dev

如果我在PHP函数的末尾不包含“ return”,会发生什么情况?

来自分类Dev

如果我在不将其返回值分配给变量的情况下调用函数,会发生什么情况?

来自分类Dev

当我在Amazon S3中将Quiet设置为true以便在deleteObjects()方法中启用安静模式时会发生什么情况?

来自分类Dev

如果我将dropna更改为True / False,会发生什么情况

Related 相关文章

  1. 1

    当我以`even`作为生成器函数调用`even(3)`时会发生什么情况?

  2. 2

    将函数用作参数时会发生什么情况?

  3. 3

    当我们将int参数传递给重载方法时,会发生什么情况,该重载方法将float作为一个方法的参数,将另一个作为double参数

  4. 4

    iOS:当我从其他类调用重写的方法时,会发生什么情况

  5. 5

    当我们将jar提交给风暴集群时会发生什么情况?

  6. 6

    将数组作为参数传递时会发生什么情况?

  7. 7

    如果将很少的参数传递给Shell函数,会发生什么情况?

  8. 8

    当我在此函数调用中使用括号使它的行为有所不同时,会发生什么情况?

  9. 9

    当我在嵌套的 React 组件中调用作为 props 传递的函数时会发生什么?

  10. 10

    如果我不在扩展类中调用可选的超级方法或构造函数,会发生什么情况?

  11. 11

    如果我将函数主体而不是函数名称传递给setTimeout,会发生什么情况?

  12. 12

    当我从RAM运行持久性存储实时USB时会发生什么情况?

  13. 13

    当我在shell中执行文件时,会发生什么情况?

  14. 14

    当我离开INT_MAX以外时会发生什么情况?

  15. 15

    当我使用Ctrl + c终止Python脚本时,内部会发生什么情况?

  16. 16

    当我在shell中执行文件时,会发生什么情况?

  17. 17

    当我从RAM运行持久性存储实时USB时会发生什么情况?

  18. 18

    当我使用Ctrl + c终止Python脚本时,内部会发生什么情况?

  19. 19

    当我在依赖jar的项目中进行更改时会发生什么情况?

  20. 20

    以Express应用程序作为参数评估require(“ http”)。Server()时会发生什么情况?

  21. 21

    如果从类文件中删除超级构造函数调用,会发生什么情况?

  22. 22

    Matlab OOP:当在数组属性上调用get函数时,会发生什么情况?

  23. 23

    如果我在已删除的实体上调用EF Reload,会发生什么情况?

  24. 24

    调用exec()时,线程会发生什么情况?

  25. 25

    如果我在PHP函数的末尾不包含“返回”,会发生什么情况?

  26. 26

    如果我在PHP函数的末尾不包含“ return”,会发生什么情况?

  27. 27

    如果我在不将其返回值分配给变量的情况下调用函数,会发生什么情况?

  28. 28

    当我在Amazon S3中将Quiet设置为true以便在deleteObjects()方法中启用安静模式时会发生什么情况?

  29. 29

    如果我将dropna更改为True / False,会发生什么情况

热门标签

归档