나는 다음지도가 있다고 가정스칼라지도 + = 운영
import scala.collection.mutable._
val countries = Map[String, String](
("Paris", "France"),
("Washington", "USA"),
("London", "England")
)
가 그럼 난 (내가 명령 행 인수의 값을 얻을)이지도에 어떤 값을 추가하려고를 :
countries += (args(0), args(1))
그러나 위의 코드는 말을 컴파일하지 않는 나는 변경하면
found : String
required: (String, String)
그
0123에countries += ((args(0), args(1)))
또는
countries += (args(0) -> args(1))
-는 다음 성공적으로 컴파일합니다. 컴파일러가 첫 번째 경우 튜플을 인식하지 못하는 이유는 무엇입니까?
하지만 왜 그 방법을 사용하려고합니까? 필자가 알고있는 한 방법은 점 표기법없이 (그리고 매개 변수에 대한 paranthese없이) 사용할 수있는 것보다 하나의 인수 만 사용하는 경우를 알 수 있습니다. 내 경우에는 점 표기법을 사용하지 않고 + = 메서드를 사용하므로 다음 문은 2 개 값의 튜플 인 단일 매개 변수를 나타냅니다. – maks
점 표기법없이 무언가를 사용할 수있는 경우에는 이러한 제한이 없습니다. 예를 들면 :'A (def a (x : Int, y : int) = x + y}','A (1,2)'는 완벽하게 유효하며 예상대로 작동합니다. 예제의 첫 번째 괄호는 인수 목록의 시작과 같습니다. – Impredicative
@maks 혼란 스러울 수있는 점은 또한 하나의 튜플 arg가 예상되는 곳에 여러 개의 arg를 전달하면 해당 args가 컴파일러에 의해 하나의 튜플에 래핑되는 * 튜플 프로모션 *이 있다는 것입니다. 그러므로'A'는 다른 (오버로드 된) 객체가 없으면'A (def) (x : (Int, Int)) = x._1 + x._2}') 메소드'a'는 2 args를 취하는데,이 경우에는 대신 호출됩니다. –