Запись case class A
устарела. Вы должны использовать case class A()
, в противном случае присвоение A
для val a
приведет к a
, относящемуся к сопутствующему объекту класса дела A
, который создается за сценой.
Насколько я понимаю, вы хотели, чтобы a
ссылался на экземпляр класса case, а не на объект-компаньон.
Если это так, то, что вы спрашиваете, возможно - a
и b
не обязательно должны быть неявными, но вы должны добавить новый неявный метод в область действия:
implicit def obtainC = new C(a, b)
Затем вы должны установить модификатор implicit
на c
в методе foo
:
def foo(implicit c: C)
Завершить сеанс:
scala> case class A()
defined class A
scala> case class B()
defined class B
scala> case class C(a: A, b: B)
defined class C
scala> val a = A()
a: A = A()
scala> val b = B()
b: B = B()
scala> implicit def obtainC = new C(a, b)
obtainC: C
scala> def foo(implicit c: C) = {}
foo: (implicit c: C)Unit
scala> foo