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