2016-08-28 1 views
0

任意の順序で2つの変数を特定のペアにペアにすることができるかどうかを確認したいと思います。基本的には、以下の、唯一のそれはに明確ではなかったことから、...働くことになる同じことを行うための別の方法がありますランタイムScala:2つの変数の組み合わせを確認してください

def combination[A,B](x: Any, y: Any): Option[(A, B)] = 
    (x, y) match { 
    case (a: A, b: B) => Some(a, b) 
    case (b: B, a: A) => Some(a, b) 
    case _ => None 

であるため型消去の

+0

2つの引数のタイプを制限できますか? – Anton

答えて

5

注動作しません。あなたのメッセージ、あなたが定数のペアに対してパターンマッチをしたい場合は(a、b)は、あなたが代わりに何をやっているのバックティックを検討する必要があります。一方

case (`a`, `b`) => Some(a, b) 

をあなたがtの任意の値のペアの要素を取得しようとしている場合ype(A、B)、任意の順序で、非プリミティブ型(つまり、 AnyRefのサブタイプ):

import scala.reflect.ClassTag 
def combination[A, B](x: AnyRef, y: AnyRef)(implicit tagA: ClassTag[A], tagB: ClassTag[B]): Option[(A, B)] = (x, y) match { 
    case (a: A, b: B) => Some(a, b) 
    case (b: B, a: A) => Some(a, b) 
    case _ => None 
} 
+0

これは私が必要としていた完璧なものです。 –

関連する問題