Кэширование неявного разрешения

Чтобы сократить время компиляции моего проекта, я кэширую определенные классы типов, которые разрешаются неявными поисками. Это кажется несколько громоздким, потому что прямая реализация не работает:

scala> implicit val x: String = implicitly[String]
x: String = null

Неявный поиск рассматривает свое собственное неинициализированное определение как допустимую реализацию.lazy val взорвал бы стек бесконечной рекурсией. Поэтому в настоящее время я обращаюсь с этим следующим образом:

implicit val x: String = cache.x

object cache {
   val x: String = implicitly[String]
}

Но это усложняет задачу, и определения кэша не могут легко использовать другие классы кэшированных типов (поскольку они не являются неявными).

Кроме того, сокрытие самого значения от области, к сожалению, не работает.

scala> :pas
// Entering paste mode (ctrl-D to finish)

object scope {
    implicit val x: String = {
        import scope.{ x => _ }
        implicitly[String]
    }
}

// Exiting paste mode, now interpreting.

defined object scope

scala> scope.x
res0: String = null

Есть ли более элегантный способ добиться неявного разрешения кэша?

Ответы на вопрос(2)

Ваш ответ на вопрос