在伴侣对象在类中时使用.tupled方法

mde*_*ich 39 singleton scala case-class slick

我正在从Slick迁移到Slick 2,在Slick 2中你想tupled在投影到案例类时使用该方法(如http://slick.typesafe.com/doc/2.0.0-所示)RC1/migration.html)

问题是当case类有一个伴随对象时,即如果你有这样的东西

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

}
Run Code Online (Sandbox Code Playgroud)

与伴侣对象一起

object Person {
  def something = "rawr"
}
Run Code Online (Sandbox Code Playgroud)

在相同的范围内,该tupled方法不再有效,因为它试图运行tupledobject,而不是,case class.

有没有一种方法来检索case classPerson,而不是object,所以你可以调用tupled正确?

Ale*_*nov 81

你也可以写

(Person.apply _).tupled
Run Code Online (Sandbox Code Playgroud)

避免重复这些类型.


Tim*_*ier 22

这与Alexey Romanov所说的非常相似,但为了避免apply在需要时提升tupled,我们只需将其添加到我们的伴侣对象中.

object Person {
  def something = "rawr"
  def tupled = (Person.apply _).tupled
}
Run Code Online (Sandbox Code Playgroud)

现在你可以Person.tupled像你没有伴侣对象一样打电话.


kaw*_*wty 6

一种解决方法是定义一个伴随对象,如下所示:

object Person extends((String,String) => Person) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

看到.https://groups.google.com/d/msg/scala-user/jyWBMz5Qslw/Bryv4ftzRLgJ