我正在从Slick迁移到Slick 2,而在Slick 2中,当投影到一个case类(如此处所示http://slick.typesafe.com/doc/2.0.0-RC1/migration.html)时,你应该使用tupled
方法。
问题在于如果case类有伴生对象,例如像这样:
case class Person(firstName:String, lastName:String) {
}
与伴生对象一起使用
object Person {
def something = "rawr"
}
在相同的作用域中,tupled
方法不再起作用,因为它试图在 object
上运行 tupled
,而不是在case class
上运行。有没有一种方法可以检索出
Person
的 case class
而不是 object
,以便您可以正确地调用 tupled
?
Person
中;它不一定要是伴生对象。 - Erik KaplunBigDecimal
(例如)时,如果有全局方法,则应将这些方法附加到BigDecimal
而不是BigDecimalHelpers
或类似的其他名称,这是有原因的。 - mdedetrichcase class
相同命名空间的对象的意图并不是为了覆盖case class
,而是将object
中的方法/值添加到case class
的相同命名空间中。这种做法在几乎所有主流的面向对象编程语言(包括Java、Scala等)中都有应用。除非您在object
中定义了apply
、unapply
,否则您不会重写或重新实现case classes
,而是在命名空间上进行添加。无论一个class
是case class
还是普通class
都是无关紧要的,case classes
只是添加了apply/unapply方法。 - mdedetrichtupled
方法消失了呢? - Erik Kapluntupled
方法会 "消失",我不知道。经过一些快速的阅读,可能是由于隐式转换将其引入作用域的方式(这是在内部完成的)。请记住,即使有伴生object
,您仍然可以很好地使用case classes
。这个问题只是因为我特别需要使用tupled
方法而出现的。 - mdedetrich