Последствия, прыщ шаблон и т. Д. - PullRequest
3 голосов
/ 23 февраля 2011

Допустим, у меня есть эти классы:

case class A()
case class B()
case class C(a: A, b: B)

и эти переменные:

val a = A()
val b = B()

Есть ли способ получить экземпляр C неявно и без создания a и b неявные значения?Т.е. если у меня есть метод, ожидающий C:

def foo(c: C)

1 Ответ

6 голосов
/ 23 февраля 2011

Запись 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...