2012-08-09 4 views
2

저는 스칼라를 처음 접했습니다. 파이썬에서 왔고 문법과 규칙을 고수하려고했습니다.List [Int] .apply (1,2,3)가 Scala에서 오류를 발생시키는 이유는 무엇입니까?

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() 나에게 오류를 제공 않습니다 : 나는 다음 작업을 수행 할 때

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) 

그러나, 나는 오류를 얻을 : 다음 작동하지 않는 이유가 궁금 하군요?

도움 주셔서 감사합니다.

답변

12

구문이 잘못 되었기 때문입니다. List는 동반자 객체를 참조하고, 표현 List.apply(1,2,3)에서

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

및 개체가 제네릭을 가질 수 없습니다 : 당신이 List.apply(1,2,3)의 동등한를 원하는 경우에, 그것은해야합니다. 따라서 메서드에 제네릭을 넣어야합니다.

참조 할 수 List의 소스 코드에서 볼 수 있습니다 : 당신이 List[Int].apply(1,2,3)을 쓸 때

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

는 스칼라와 (List[Int]).apply(1,2,3) 해석합니다. List[Int]은 괄호없이 List[Int]() 인 것으로 해석되며 List.apply[Int]과 같습니다. apply에 인수가 필요하기 때문에 Scala는 이것이 없다는 오류 메시지를 표시합니다.

+0

아, 정말 고마워! – aaronlevin

관련 문제