Ответ 1
Вы также можете написать
(Person.apply _).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
?
Вы также можете написать
(Person.apply _).tupled
чтобы избежать повторения типов.
Это очень похоже на то, что сказал Алексей Романов, но чтобы не поднимать apply
, когда вам нужно tupled
, мы просто добавляем его к нашим сопутствующим объектам.
object Person {
def something = "rawr"
def tupled = (Person.apply _).tupled
}
Теперь вы можете вызвать Person.tupled
так же, как если бы у вас не было сопутствующего объекта.
В одном обходном пути определяется объект-компаньон следующим образом:
object Person extends((String,String) => Person) {
...
}
См. https://groups.google.com/d/msg/scala-user/jyWBMz5Qslw/Bryv4ftzRLgJ
Чтобы использовать некоторые другие комментарии, вы можете сделать следующее, так как кортеж вызывает сгенерированный метод применения по умолчанию для класса case.
object Person {
...
def tupled = (this.apply _).tupled
}