2011-02-27 5 views
4

이 일을하는 더 이상하지 않은 방법이 있다는 것을 알고 있지만 왜이 코드가 작동하지 않습니까? (대체로, x += 2의 첫 번째 시도는 왜 효과가 없습니까?) 스칼라에 대해 처음으로 아주 이상하게 보입니까? 오류 메시지 일부는 implicit def 마법이 제대로 작동하지 않습니까?왜 + = 목록과 함께 작동하지 않습니까?

scala> var x: List[Int] = List(1) 
x: List[Int] = List(1) 

scala> x += 2 
<console>:7: error: type mismatch; 
found : Int(2) 
required: String 
     x += 2 
      ^

scala> x += "2" 
<console>:7: error: type mismatch; 
found : java.lang.String 
required: List[Int] 
     x += "2" 
     ^

scala> x += List(2) 
<console>:7: error: type mismatch; 
found : List[Int] 
required: String 
     x += List(2) 

답변

10

잘못된 연산자를 사용하고 있습니다.

컬렉션에 추가하려면 이 아닌 :+을 사용해야합니다. 이는 +을 사용하여 Java의 동작을 미러링하여 문자열에 연결할 때 발생하는 문제로 인해 발생합니다.

scala> var x: List[Int] = List(1) 
x: List[Int] = List(1) 

scala> x :+= 2 

scala> x 
res1: List[Int] = List(1, 2) 

앞자리에 넣으려면 +:을 사용할 수도 있습니다.

2

Scala API에서 List을 살펴보십시오. 요소를 목록에 추가하는 방법은 다음과 같습니다.

2 +: x 

x :+ 2 

2 :: x 
관련 문제