2017-12-21 10 views
1

스칼라에서 연산자와 패턴 매칭을 할 수 있습니까? 나는 예를 ("Hello World", +) 또는 ("Good Afternoon", /)를 들어, 입력 튜플을 원하는 것처럼, 다른 사업자에 대해 서로 다른 작업을 할 :스칼라 : 연산자 패턴 매칭

mytuple match { 
    case (SomeRegex(str), +) => println(str + " the same") 
    case (SomeRegex(str), /) => println(str + " but different") 
} 

가 어떻게 올바르게 할 수 있습니까? 운영자가하는 일에 신경 쓰지 않고 단지 환경 인으로만 보내고 싶습니다.

심지어 문자 + 또는 /을 따라 가더라도 모범 사례로 간주되지만 거의 믿을 수 없습니다.

답변

1

+*은 어디에서 오는 것입니까? 그리고 mytuple의 유형은 무엇입니까?

답변에 따라 적절할 수 있습니다.

이 언어는 실제로 *+을 개체로 표시하지 않습니다 (적어도 목표로하는 것처럼 보이지는 않습니다). 손에 이러한 정의와

sealed trait Op 
case object `+` extends Op 
case object `*` extends Op 
// ... 

...

def dispatch(mytuple: (String, Op)): Unit = 
    mytuple match { 
    case (SomeRegex(str), `+`) => println(str + " the same") 
    case (SomeRegex(str), `*`) => println(str + " but different") 
    case _ =>() 
    } 

당신은 취급 할 수 +* (또는 파서 달리 취급 수도 있음을 다른 문자열 : deftypeclasssome identifier with spaces) 일반 식별자로하여 그것들을``에 포장하십시오.