나는 매개 변수로 가변 인자를 받아들이는 클래스를 작성하고, 사용자가 자주 매개 변수 지정하지 않고 인스턴스화 할 수 있도록 기본을 지정Scala varargs 매개 변수의 기본값을 지정할 수없는 이유는 무엇입니까?
class MyClass(values: Int* = 42) { }
그러나, 컴파일러와 REPL이 나에게 다음과 같은 오류가 줄을 :
해결 방법으로<console>:7: error: type mismatch;
found : Int(42)
required: Int*
class MyClass(values: Int* = 42) { }
^
<console>:7: error: a parameter section with a `*'-parameter is not allowed to have default arguments
class MyClass(values: Int* = 42) { }
, 나는 다음과 같은 시도했지만 그 중 하나가 작동하지 않았다 : (. 그것은 분명히 매우 모호한)
class MyClass(value: Int = 42, otherValues: Int*) { }
varargs 매개 변수의 기본값을 가질 수없는 이유가 궁금합니다. 여기에있는 추론이나 기술적 인 이유는 무엇입니까? (내 생각 엔 비어있는 varargs를 지정하는 것은 특별한 구문이나 관용구가 필요하지만 충분한 이유인지 확실하지 않습니다.)
왜 'def foo (결과 : Int = 0, xs : String *) = ???'는 허용되지 않습니까? 컴파일러가 합법적 인 구조로'foo (0, "컴파일 할 수 없다")를 인식하는 것이 완벽하게 가능하다. –
@ om-nom-nom, 내가 너를 잘 모르는.나는 def foo (결과 : int = 0, xs : String * = Seq ("some", "default")) = ???를 지원하지 않으려 고하는 이유에 대해 대답하고 있습니다. – huynhjl
그래도 컴파일러는 내 경우에 똑같은 제한을 두었고 (최소한 동일한 컴파일 오류를 준다), 두 경우를 통합하는 다른 이유가있을 것이라고 생각한다. –