22
A
回答
32
这被称为可变数量的参数或简短可变参数。它的静态类型是Seq[T]
,其中T
代表T*
。因为Seq[T]
是一个接口,所以它不能用作实现,在这种情况下是scala.collection.mutable.WrappedArray[T]
。为了找出这样的事情可能是有用使用REPL:
// static type
scala> def test(args: String*) = args
test: (args: String*)Seq[String]
// runtime type
scala> def test(args: String*) = args.getClass.getName
test: (args: String*)String
scala> test("")
res2: String = scala.collection.mutable.WrappedArray$ofRef
可变参数通常在组合与_*
符号,这是一个提示编译器将Seq[T]
的元素传递给函数,而不是使用
scala> def test[T](seq: T*) = seq
test: [T](seq: T*)Seq[T]
// result contains the sequence
scala> test(Seq(1,2,3))
res3: Seq[Seq[Int]] = WrappedArray(List(1, 2, 3))
// result contains elements of the sequence
scala> test(Seq(1,2,3): _*)
res4: Seq[Int] = List(1, 2, 3)
相关问题
- 1. 具有泛型类型的可变长度参数scala
- 2. 类型球拍中可变参数的类型是什么?
- 3. 在运行时在Scala中检查参数类型(来自可变长度参数列表)
- 4. Codeigniter可变长度参数列表
- 5. 可变长度参数列表
- 6. 可变长度模板参数列表?
- 7. 什么是Scala 2.8中.Net ArrayList可变类型的等价物?
- 8. 带默认参数的可变长度参数列表?
- 9. 什么是类型和什么是类型构造函数scala
- 10. 传递变量的可变长度的参数列表在PHP
- 11. 类型可变长度数组列中的默认值Postgresql
- 12. 是否有静态类型和可变长度的Java数组/列表
- 13. 编辑另一个可变长度列表中的可变长度列表
- 14. 为什么scala:_ *将Seq展开成可变长度参数列表在这种情况下不起作用?
- 15. 可变长度参数
- 16. Erlang函数参数列表的可变长度
- 17. Python:具有可变长度参数列表的函数
- 18. Scala中的“底层类型”是什么?
- 19. 如何用已知参数类型文档变量长度变量列表?
- 20. 未知长度的可变参数列表的问题
- 21. 在变长参数列表中检查类型
- 22. MySQL固定长度和可变长度数据类型
- 23. 参数中的3个点是什么?/什么是可变参数(...)参数?
- 24. PHP - 传递数组作为可变长度参数列表
- 25. 传递可变长度的参数列表AngularJS指令
- 26. 功能的可变长度参数列表
- 27. 可变长度参数列表的功能?
- 28. 是否可以指定匿名类型的列表长度?
- 29. Scala中class参数的val是什么?
- 30. 什么数据类型应该用德语字符变长度?
是的,这有和有趣的效果,你不能马上通过VAR-LEN ARGS,'高清F1中的序列本身(参数为:int *)= args.length; def f2(args:Int *)= f1(args)'。它将在f2定义中给出'找到Seq [Int],而Int需要不匹配错误'。为了规避,你需要'def f2 = f1(args:_ *)'。所以,编译器认为这个参数是一个单一的值,并且在编译时相同的顺序:) – Val