2017-10-23 9 views
3

Someunapplyメソッドで使用しないと、次のコードが機能しないのはなぜですか?なぜ私は未適用のメソッドでいくつかを返す必要があります

scala> object T { 
    | def unapply(i:Int) = (i+1,i+2) //Some not used, I get error 
    | } 
defined object T 

scala> 1 match { 
    | case T(x,y) => println(x,y) 
    | } 
<console>:14: error: an unapply result must have a member `def isEmpty: Boolean 
     case T(x,y) => println(x,y) 
      ^

scala> object T { 
    | def unapply(i:Int) = Some(i+1,i+2) //Some used. No error 
    | } 
defined object T 

scala> 1 match { 
    | case T(x,y) => println(x,y) 
    | } 
(2,3) 

スカーラ>

答えて

6

あなたにはありません。 isEmpty()メソッドとget()メソッドを持つものを返さなければなりません。 Optionは両方を提供しているので便利な解決策です。

これは、一致が成功したことをコンパイラが認識する方法です。 isEmpty()trueを返した場合、一致は失敗し、次の一致が試行されます(次がある場合)。

関連する問題