8

據我所知,像ListSeq這樣的特徵是在Scala標準庫中實現的,而不是語言本身的一部分。Scala可變參數函數和Seq

有一兩件事,我不明白,但:一個具有可變參數函數語法看起來像

def foo(args: String*) = ... 

內部人進入args,這將是一個Seq

這是我不清楚是否:

  • Seq被認爲是一種特殊的數據結構,足以見得作爲語言的一部分,或
  • 這裏*符號是一個更一般的特殊情況管理避免對具體數據結構接口的任何引用的語法。

有誰知道哪一個是正確的解釋?

回答

12

語言和圖書館確實有點「模糊」。

的參數部分的最後值參數可以由「*」的後綴,例如:在§4.6.2重複參數 Scala語言規範V2.9狀態(...,x:T *)。該方法內的這種重複參數的類型是序列類型scala.Seq[T]

所以當你使用重複的參數時,假設scala.Seq在運行時可用(應該是這種情況,因爲它是標準庫的一部分)。

1

我認爲這是第一個。語言要求存在幾種類型,儘管它們不是語言的一部分。通過Seq,你找到了一個。