我正在从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
方法不再有效,因为它尝试在tupled
而不是object
上运行case class
。
有没有办法检索case class
Person
而非object
,以便您可以正确调用tupled
?
答案 0 :(得分:78)
你也可以写
(Person.apply _).tupled
避免重复这些类型。
答案 1 :(得分:20)
这与Alexey Romanov所说的非常类似,但为了避免在您需要apply
时提升tupled
,我们只需将其添加到我们的伴侣对象中。
object Person {
def something = "rawr"
def tupled = (Person.apply _).tupled
}
现在,您可以像Person.tupled
一样调用 XElement xmlTree = new XElement("Root", new XElement[] {
new XElement("Child1", 1),
new XElement("Child2", 2),
new XElement("Child3", 3),
new XElement("Child4", 4),
new XElement("Child5", 5)
});
,如果它没有配套对象的话。
答案 2 :(得分:5)
一种解决方法是定义一个伴随对象,如下所示:
object Person extends((String,String) => Person) {
...
}
请参阅。 https://groups.google.com/d/msg/scala-user/jyWBMz5Qslw/Bryv4ftzRLgJ
答案 3 :(得分:3)
要构建其他一些注释,您可以执行以下操作,因为元组正在为案例类调用生成的默认应用方法。
object Person {
...
def tupled = (this.apply _).tupled
}