스칼라 2.8에서 케이스 클래스의 생성자를 오버로드하는 방법이 있습니까?스칼라의 사례 클래스에 대한 오버로드 생성자?
예인 경우 설명에 대한 설명을 넣어주세요. 그렇지 않다면 이유를 설명해주십시오.
스칼라 2.8에서 케이스 클래스의 생성자를 오버로드하는 방법이 있습니까?스칼라의 사례 클래스에 대한 오버로드 생성자?
예인 경우 설명에 대한 설명을 넣어주세요. 그렇지 않다면 이유를 설명해주십시오.
과부하 생성자의 경우 클래스에 대한 특별한되지 않습니다 : 그러나
case class Foo(bar: Int, baz: Int) {
def this(bar: Int) = this(bar, 0)
}
new Foo(1, 2)
new Foo(1)
, 당신은 또한 당신이 new
을 생략 할 때 호출되는 동반자 객체의 apply
방법에 과부하를하실 수 있습니다.
object Foo {
def apply(bar: Int) = new Foo(bar)
}
Foo(1, 2)
Foo(1)
는 스칼라 2.8에서, 이름 및 기본 매개 변수는 종종 대신에 과부하를 사용할 수 있습니다. 엄격하게 사실이 아니다
case class Baz(bar: Int, baz: Int = 0)
new Baz(1)
Baz(1)
오버로드 된 생성자는 일반적인 방법으로 정의 할 수 있지만 호출하려면 "new"키워드를 사용해야합니다.
scala> case class A(i: Int) { def this(s: String) = this(s.toInt) }
defined class A
scala> A(1)
res0: A = A(1)
scala> A("2")
<console>:8: error: type mismatch;
found : java.lang.String("2")
required: Int
A("2")
^
scala> new A("2")
res2: A = A(2)
- 나는 스칼라에서 대체 값 같은 것을 찾고 있었다 정상 –
아주 좋은 :)대로 동반자 객체를 선언 할 수 있습니다, 그것은 2.8의 새로운입니까? 나도 몰랐어 :) – Felix
예, 명명 된 및 기본 매개 변수는 스칼라 2.8에서 새로 추가되었습니다. – retronym
Martin Odersky가 추가 적용 방법이 자동으로 추가되지 않는 이유를 설명합니다. http://www.scala-lang.org/node/976 –