/ / Dlaczego lista [Int] .apply (1,2,3) zawiera błąd w Scali? - scala

Dlaczego List [Int] .apply (1,2,3) daje błąd w Scali? - scala

Jestem nowy w Scala, pochodzący z Pythona i próbuję objąć głowę niektórymi składniami i konwencjami. Jestem ciekawy, dlaczego następujące czynności nie działają:

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)

Jednak gdy wykonuję następujące czynności, nie otrzymuję błędu:

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)

Dlaczego List[Int].apply() podać mi błąd?

Dzięki za pomoc!

Odpowiedzi:

12 dla odpowiedzi № 1

Ponieważ twoja składnia jest zła. Jeśli chcesz odpowiednik List.apply(1,2,3), wtedy powinno być:

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

W wyrażeniu List.apply(1,2,3), List odwołuje się do obiektu towarzyszącego, a obiekty nie mogą mieć generycznych. W związku z tym należy umieścić rodzajowy w metodzie.

Dla odniesienia można to zobaczyć w kodzie źródłowym dla List:

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

Kiedy piszesz List[Int].apply(1,2,3), Scala interpretuje to jako (List[Int]).apply(1,2,3). I List[Int] jest interpretowany tak, jakby był List[Int]() bez nawiasów, co jest równoważne List.apply[Int]. Od apply wymaga argumentu, Scala daje błąd informujący, że go brakuje.