2016-05-12 6 views
0

私は価値抽出を必要としないパターンマッチャーを作成しようとしており、これを行うのに非常に満足のいく方法が見つかりませんでした。今、私が得ることができる最も近いブールスカラ、抽出なしのパターンマッチング

a:Any match { 
    case IsAnInt(true) => println(s"$a is an int") 
} 

object IsAnInt { 
    def unapply(a:Any):Option[Boolean] = Some(a.isInstanceOf[Int]) 
} 

または単位のいずれかである私がどれのInt

a:Any match { 
    case IsAnInt => println(s"$a is an int") 
} 

に一致させたい

:私は、次の説明例があるとし

a:Any match { 
    case IsAnInt(()) => println(s"$a is an int") 
} 

object IsAnInt { 
    def unapply(a:Any):Option[Unit] = if (a.isInstanceOf[Int]) Some(()) else None 
} 

私はできますが、涼しいものではありません... 最初のケースを達成するために認識していないトリックイムはありますか?

(単に例を明確にするために簡素化され、私はint型を識別するための方法を探していないよ)、このようなタイプに一致する

答えて

2

あなたが使用することができますつまり、ちょうどそれが一致するかどうかを示すために、(代わりにオプションの)ブール値を返し抽出ブール抽出、:

object IsAnInt { 
    def unapply(a : Any) : Boolean = a.isInstanceOf[Int] 
} 

val x : Any = 3 
x match { 
    case IsAnInt() => println("Is an int") 
    case _ => println("Is not an int") 
} 

あなたはまだオブジェクトFに一致区切るために括弧を持っていますしかし、抽出器をROMに入れてください。

3

てみてくださいパターン、

(1: Any) match { 
    case v: Int => println(s"$v is an int") 
    case ______ => println("not an int") 
} 
関連する問題