2017-12-21 16 views
1

オペレータとのパターンマッチングをScalaで行うことは可能ですか?私は例("Hello World", +)("Good Afternoon", /)のために、入力にタプルをしたいなど、異なる事業者ごとに異なるアクションを行う :Scala:オペレータパターンマッチング

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)を扱うことが可能で、通常の識別子としてそれらを ''で包みます。