Странное поведение сопоставления с образцом при AnyRef

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 .

11
задан Luigi a.k.a. Rhys 25 January 2013 в 19:04
поделиться