同伴对象在类中时使用.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

有没有办法检索Personcase 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 } 
Interesting Posts