2016-04-29 4 views
0

私は次のコードを持っている:私はexprが密閉されたクラスであるので、私は、コンパイラの警告を受けるだろうと期待し、Scalaの密閉クラスはコンパイラの警告をそれ以上発行しませんか?

sealed abstract class Expr; 

case class Var(name: String) extends Expr; 
case class Number(num: Double) extends Expr; 

def describe(expr: Expr): Expr = expr match { 
    case Var("*") => "multiply" 
} 

しかし、私はここに(すなわち番号)の可能な例すべてをカバーしていないように見えるが、しかし私はしない?

このコードはScala 2.8の使用例であり、Scala 2.11を使用しているため、この機能は削除されていますか?

ありがとうございました。

+0

ではなくコンパイルが、あなたの説明戻っています'' Expr''ですが、 '' String''を返しています。 –

答えて

1

確かに?

私の例(タイプを返すdefの固定、セミコロンを削除):

$ cat X.scala 
sealed abstract class Expr 

case class Var(name: String) extends Expr 
case class Number(num: Double) extends Expr 

object Tst { 
    def describe(expr: Expr) = expr match { 
     case Var("*") => "multiply" 
    } 
} 

や警告がないことに関連おそらく...

$ scalac X.scala 
X.scala:7: warning: match may not be exhaustive. 
It would fail on the following inputs: Number(_), Var((x: String forSome x not in "*")) 
    def describe(expr: Expr) = expr match { 
           ^
one warning found 
関連する問題