同伴对象在类中时使用.tupled方法
我正在从Slick迁移到Slick 2,而在Slick 2中,您将在投影到一个案例类时使用tupled
方法(如http://slick.typesafe.com/doc/2.0.0所示-RC1 / migration.html )
问题是案例类有一个伴侣对象,即如果你有这样的事情
case class Person(firstName:String,lastName:String) { }
随同伴侣对象
object Person { def something = "rawr" }
在相同的范围内, tupled
方法不再起作用,因为它试图在object
上运行tupled
,而不是case class
。
有没有办法检索Person
的case class
而不是object
,所以你可以正确调用tupled
?
你也可以写
(Person.apply _).tupled
避免重复types。
这与Alexey Romanov所说的非常相似,但是为了避免在你需要tupled
时候解除apply
,我们只是把它添加到我们的伴侣对象中。
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
为了构build其他的一些注释,你可以做下面的事情,因为元组正在调用生成的case类的默认应用方法。
object Person { ... def tupled = (this.apply _).tupled }