2011-12-31 3 views
-1

Почему следующий код работает:Почему неявный сбой, когда расширенный класс является общим для Scala?

class X 

class A(implicit c: X) 
class B(arg: Int)(implicit c: X) extends A 
class C(arg: Int)(implicit c: X) extends B(arg) 

Но не этот:

class X 

class A(implicit c: X) 
class B[T](arg: T)(implicit c: X) extends A 
class C(arg: Int)(implicit c: X) extends B(arg) 

Который не может со следующей ошибкой:

error: could not find implicit value for parameter c: core.X

class C(arg: Int)(implicit c: X) extends B(arg)

+0

-1. Это не помогает при опускании сообщений об ошибках. – sschaef

+0

@ Анторы вы правы ... исправлены. –

+0

Оба работают для меня на 2.9.1.final. Какую версию вы используете? –

ответ

4

Это похоже на работу, если вы помогаете при вызове конструктора для B:

class X 

class A(implicit c: X) 
class B[T](arg: T)(implicit c: X) extends A 
class C(arg: Int)(implicit c: X) extends B[Int](arg) 

Так что это не похоже на фундаментальное ограничение. Но сообщение об ошибке, которое вы не указали, очень бесполезно. не смог найти неявное значение для параметра c: X.

Смежные вопросы