У меня есть класс case, определенный как таковой:
case class StreetSecondary(designator: String, value: Option[String])
Затем я определяю явный объект-компаньон:
object StreetSecondary {
//empty for now
}
Акт определения явного сопутствующего объекта StreetSecondary заставляет компилятор выпустить "неявный сопутствующий объект" для потери; т.е. нет возможности доступа к выпущенной версии компилятора. Например, метод tupled
доступен для класса case StreetSecondary через этот неявный объект-компаньон. Однако, как только я определяю явный объект-компаньон, метод tupled
"потерян".
Итак, что мне нужно, чтобы определить/добавить/изменить указанный выше объект StreetSecondary сопутствующего объекта, чтобы восстановить все функциональные возможности, потерянные при замене компилятора предоставленным имплицированным сопутствующим объектом? И я хочу больше, чем только метод tupled
восстановлен. Я хочу, чтобы все функциональные возможности (например, включая extractor/unapply
) были восстановлены.
Спасибо за любое руководство/руководство, которое вы можете предложить.
ОБНОВЛЕНИЕ 1
Я сделал достаточно поиска, чтобы обнаружить несколько вещей:
A) Явный объект-компаньон должен быть определен до его класса case (по крайней мере это относится к рабочему листу Eclipse Scala -IDE), и код не работает в рабочей таблице IntelliJ IDE, независимо от того, что наступит раньше).
B) Существует технический трюк, чтобы заставить tupled
работать (спасибо drstevens): (StreetSecondary.apply _).tupled
Хотя это решает конкретную проблему метода tupled
, он все еще не точно или полностью не описывает, что scala компилятор предоставляет неявный объект-компаньон.
C) Наконец, явный объект-компаньон может быть определен для расширения функции, которая соответствует сигнатуре параметров основного конструктора и возвращает экземпляр класса case. Это выглядит так:
object StreetSecondary extends ((String, Option[String]) => StreetSecondary) {
//empty for now
}
Опять же, я все еще не уверен точно или полностью описываю, что компилятор scala предоставляет в неявном сопутствующем объекте.