Подтвердить что ты не робот

Использование метода .tupled, когда объект-компаньон находится в классе

Сейчас я перехожу от Slick к Slick 2, а в Slick 2 вы должны использовать метод tupled при проецировании на класс case (как показано здесь http://slick.typesafe.com/doc/2.0.0-RC1/migration.html)

Проблема заключается в том, что класс case имеет объект-компаньон, т.е. если у вас есть что-то вроде этого

case class Person(firstName:String,lastName:String) {

}

Наряду со сопутствующим объектом

object Person {
  def something = "rawr"
}

В той же области действия метод tupled больше не работает, потому что он пытается запустить tupled в object вместо case class.

Есть ли способ получить case class Person, а не object, чтобы вы могли правильно вызвать tupled?

4b9b3361

Ответ 1

Вы также можете написать

(Person.apply _).tupled

чтобы избежать повторения типов.

Ответ 2

Это очень похоже на то, что сказал Алексей Романов, но чтобы не поднимать apply, когда вам нужно tupled, мы просто добавляем его к нашим сопутствующим объектам.

object Person {
  def something = "rawr"
  def tupled = (Person.apply _).tupled
}

Теперь вы можете вызвать Person.tupled так же, как если бы у вас не было сопутствующего объекта.

Ответ 4

Чтобы использовать некоторые другие комментарии, вы можете сделать следующее, так как кортеж вызывает сгенерированный метод применения по умолчанию для класса case.

object Person {
  ...
  def tupled = (this.apply _).tupled
}