2016-09-25 6 views
0

케이스 클래스 A을 3 정수 매개 변수 b, cd으로 정의한다고 가정 해보십시오. bc을 지정해야합니다. d을 지정하거나 c + 1으로 간주해야합니다.매개 변수 기본값을 다른 매개 변수 값의 순수한 함수로 설정하는 방법은 무엇입니까?

case class A(b: Int, c: Int, d = c + 1) 

을하지만이 작동하지 않습니다

다음과 같이 나는 이것을 정의 할 것이다. 올바른 양식은 무엇입니까?

스칼라에서는 이것이 가능하다는 것을 기억할 수 있지만 어떻게 할 수 있는지 기억이 안납니다.

+0

이것이 스칼라에서 가능한지 확실하지 않습니다. 하나의 옵션은 두 개의 매개 변수를 취하고 기본값을 마지막 값으로 제공하는 동반자 객체에서'A'에 대해'apply'를 정의하는 것입니다. – JSchlather

+0

@JSchlather 그게 전부 야. 답변을 제출하여 승인 해 드리겠습니다. – Ivan

+0

@JSchlather 가능하다. 케이스 클래스에만 유용하지는 않다. –

답변

3
case class A(b: Int, c: Int)(val d: Int = c + 1) 

A(1, 1)().d // 2 

그러나! 이것은 방법과 비 - case 클래스에 대한 좋은 해결책입니다. 그러나 사례 클래스의 경우 자동 생성 된 메서드 (equals, hashCode, applyunapply)는 첫 번째 매개 변수 목록 만 처리하므로 거의 확실하게 원하는 것은 수행하지 않습니다. 이 경우 @ JSchlather의 제안을 따르십시오.

2

간단한 해결책은 원하는 대체가있는 컴패니언 개체에 적용하는 것입니다.

case class A(b: Int, c:Int, d: Int) 

object A { 
    def apply(b: Int, c:Int): A = A(b, c, c + 1) 
}