2016-04-25 9 views
1

case文で式を配置できないのはなぜですか? :例scala:値式にマッチすることはできませんか?

x match { 
    case (1+2) => {} 
    } 

については

x match { 
    case <VALUE EXPR> => {} 
    } 

は許されますが、

val someval = (1+new java.util.Random().nextInt()) 

    x match { 
    case someval => {} 
    } 

があるされていません。 2番目のケースが許可されている場合、最初のケースも許可されているようです。

私はこのようなマッピングのリストを追加しようとしています:

val typ:Type = symbol.typeSignature 

    typ match { 
    case typeOf[collection.immutable.List[Any]] => { return a function to handle this type } 
    case typeOf[...] => {} 
    case typeOf[...] => {} 
    ... many 
    } 
+2

注ケースsomeval'は、あなたはそれが新しいが作成されるため、それが何かを一致させるだろう期待して何をしない 'という変数。これを変更するには、変数名を大文字にするか、バッククォートで変数名を囲む必要があります。 –

答えて

7

それは単にパターンパターンマッチングでの定義を挑みます。 Scala Language Specificationから

、第8章:

パターンは、このリストに含まれていない定数、コンストラクタ、変数や

「式」タイプの試験から構築され、それは、いくつかの理にかなっている

- それについて考える - この式はいつ評価されるのですか?副作用がある場合、結果を返すために前のケースが使用されたとしても評価されますか?

有効な回避策はが評価されガードを、使用している:

x match { 
    case i if i == (1+2) => {} // works as expected... 
} 
+0

thx frがそれをクリアしています:) –

関連する問題