2016-09-06 3 views
0

다음 열거 형을 사용합니다.스칼라 : 동적 계약을 인수로 사용하는 함수

object Smth extends Enumeration { 
    class Value(name: String, func: (String, Int) => Boolean) extends super.Val(name) 

    private def opA(index: Int) : Boolean ={ 
     index > 0 
    } 
    private def opB(x: String, index: Int) : Boolean ={ 
     index > 0 && x.length > 0 
    } 

    val x = new Value("X", opA) // type mismatch error for opA 
    val y = new Value("Y", opB) 
} 

열거 생성자 형식 (String, Int) => Boolean의 인수로하는 함수 걸린다. 가능은 예를 들어, 2 별개의 계약으로 기능을 수락하는 방식으로 열거 생성자를 만드는 것입니다 :

(String, Int) => Boolean 
(Int) => Boolean 

내가 함수 정의에서 인수에 대해 기본값을 사용하지 않도록 노력하고 있어요.

사용 방법입니다.

class Value(val name: String, val func: (String, Int) => Boolean) extends super.Val(name) { 
    def apply(name: String, func: (Int) => Boolean): Value = 
     new Value(name, (x -> func("default value", x))) 
} 
+0

그냥 다른 생성자를 추가

if(Smth.x.func(0)) { do smth } else if(Smth.y.func("str", 0)) { do smthElse } 
talex

+0

적용 메소드를 추가하면 class 값 (val name : String, val func : (String, Int) => Boolean)은 super.Val (name)을 확장합니다. { def apply (name : String, func : (Int) = > 부울) required : (String, Int) => 부울' – tmp123

+0

답변으로 제안을 게시 할 예정입니다. – talex

답변

0

당신은 단지 당신이 할 수있는 기본 값을 원하는 경우

.
+0

저는 디폴트 값을 피하려고 노력하고 있으며, 다른 방법으로 그것을하고 있는지 궁금합니다. 더 많은 맥락을 추가하는 질문을 업데이트 할 것입니다. – tmp123

+0

어쩌면 당신은 두 개의 별도의 클래스가 필요합니까? – talex

+0

그건 그걸 하나의 "엔티티"로 묶는 것을 선호합니다. – tmp123

관련 문제