2012-08-09 33 views
2

我是新來的Scala,來自python,並試圖圍繞一些語法和約定我的頭。我很好奇,爲什麼下面不工作:爲什麼列表[Int] .apply(1,2,3)在Scala中給出錯誤?

scala> val tmp = List[Int].apply(1,2,3) 
<console>:7: error: missing arguments for method apply in object List; 
follow this method with `_' if you want to treat it as a partially applied function 
    val tmp = List[Int].apply(1,2,3) 

然而,當我這樣做,我沒有得到任何錯誤:

scala> val tmp = List.apply(1,2,3) 
tmp: List[Int] = List(1,2,3) 

scala> val tmp = List[Int](1,2,3) 
tmp: List[Int] = List(1,2,3) 

爲什麼List[Int].apply()給我一個錯誤?

感謝您的幫助!

回答

12

因爲你的語法錯了。如果你想的List.apply(1,2,3)等價,那麼就應該是:

val tmp = List.apply[Int](1,2,3) 

在表達List.apply(1,2,3)List被引用的同伴對象,對象不能有仿製藥。因此,你必須把通用的方法。

僅供參考,您可以在源代碼中看到這樣的List

object List extends SeqFactory[List] { 
    ... 
    override def apply[A](xs: A*): List[A] = xs.toList 

當你寫List[Int].apply(1,2,3),斯卡拉解釋,作爲(List[Int]).apply(1,2,3)。並且List[Int]被解釋爲沒有括號的List[Int](),相當於List.apply[Int]。由於apply需要參數,因此Scala會給您一個錯誤,告訴您它缺失。

+0

啊,非常感謝! – aaronlevin 2012-08-09 21:06:56

相關問題