Scalaの「一致」セマンティクスまたはコンパイラロジックについて、基本的な誤解が必要です。このコード:
val stageStart:Int = 0
val stageShutDown:Int = Int.MaxValue
val stageErrorReport:Int = Int.MinValue
def stageString(stage:Int):String = stage match {
case stageStart => "Start"
case stageShutDown => "End"
case stageErrorReport => "Error"
case _ => "Step " + String.valueOf(stage)
}
最後の3つの「case」ステートメントで「到達不能コード」エラーが発生しますか?名前の代わりに実際の値(0、Int.MaxValue、Int.MinValue)に置き換えると、コンパイルされますが、(通常の理由で)名前で参照する必要のある値をハードコーディングしました。'val'は決して変更できないので、最初のバージョンも機能するべきではありませんか?