2015-01-03 11 views
1

다음 코드는 스칼라에서 어떻게 작동합니까?여러 인수가있는 일부가 터플 옵션을 만듭니다

scala> Some(2,true,3, false) 
res13: Some[(Int, Boolean, Int, Boolean)] = Some((2,true,3,false)) 

하나 이상의 인수를 사용할 수있는 일부 메소드에 정의 된 적용 메소드가 표시되지 않습니다.

+1

참조 http://stackoverflow.com/questions/5997553/why-and-how-is-scala-treating-a-tuple-specially-when-calling-a-one-arg-function http : // stackoverflow.com/questions/3526156/in-scala-how-come-println1-2-works http://stackoverflow.com/questions/2850902/scala-coalesces-multiple-function-call-parameters-into-a-tuple -can-this-be-di/2852147 # 2852147 – stew

+0

감사합니다. 이것은 아주 놀라운 일입니다. – user3246194

답변

3

다중 인수는 그렇지 않은 경우에는 튜플을 만들기 위해 암시 적으로 조정됩니다. 이 모든 방법에 대해 일어날 것, Some 특별한 아무것도 여기에 없다 :

def doSomething(a: Any) = {...} 
doSomething(2, true, 3, false) 

당신은 (그리고, 내가 주장해야 것, 그것은 오류를 프로그래밍 마스크 경향이 misfeature의) 할 수있는 컴파일러를 만들이 경우 경고를 방출 플래그 -Ywarn-adapted-args을 전달하여 발생합니다. 유사한 권장 플래그 목록은 here을 참조하십시오.

1

Some(2,true,3, false)Some(new Tuple4(2,true,3, false))에 대한 구문 당입니다.

유형 그것은 22 개 요소까지 작동 Some[(Int, Boolean, Int, Boolean)]

하고 당신이 더 필요한 경우, 다음 집합이 아니라 튜플을 사용할 수 있습니다 왜 그.