def test1(a: Any) = a match {
case x: AnyRef => "AnyRef"
case _ => "None of the above"
}
def test2(a: Any) = a match {
case x: Double if x > 2 => "Double > 2"
case x: AnyRef => "AnyRef"
case _ => "None of the above"
}
Пожалуйста, объясните, почему в следующем, первом случае 1.0
соответствует AnyRef
, но во втором - нет. (Scala 2.9.0-1)
scala> test1(1.0)
res28: java.lang.String = AnyRef
scala> test2(1.0)
res29: java.lang.String = None of the above
править - Обновление Scala 2.10, январь 2013 г. : новый сопоставитель шаблонов исправляет это поведение (или, по крайней мере, делает его согласованным) и метод test2
теперь возвращает AnyRef как для test1
.