Ответ Алекса умный, однако мне не очень нравится _
в названии объекта, я нахожу синтаксис немного странным, и запоминание подчеркивания делает сопоставление с образцом более трудным для использования. (Конечно, это все субъективно, поэтому ваши чувства могут отличаться).
Моим первым подходом к решению этой проблемы было перемещение неявных параметров в метод apply
в сопутствующем объекте.
case class A(i: Int, b: Boolean)
object Foo {
def apply(i: Int)(implicit b: Boolean): Foo = apply(a, b)
}
Но это приводит к
Error:(21, 14) double definition:
method apply:(i: Int, b: Boolean)com.workday.cloud.master.package.A and
method apply:(i: Int)(implicit b: Boolean)com.workday.cloud.master.package.A at line 24
have same type after erasure: (i: Int, b: Boolean)com.workday.cloud.master.package.A
case class A(i: Int, b: Boolean)
^
Как предложил мой друг Юрий, мы можем исправить это, добавив дополнительный неявный параметр Unused
.
object A {
implicit object Unused
def apply(i: Int)(implicit b: Boolean, unused: Unused.type): A = apply(i, b)
}
Какой подход вы выберете, зависит от вас, я считаю, что этот подход позволяет моему клиентскому коду выглядеть более естественным.