【发布时间】:2014-04-17 12:09:37
【问题描述】:
我正在从 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?
【问题讨论】:
-
你绝对需要伴生对象吗?另外,我认为这是一个与 Slick 无关的一般 Scala 问题。
-
是的,除非我想像我的项目的一半那样重构(伴生对象有很多用于相关案例类的辅助方法),是的,你是对的,它与slick,刚刚提到它是因为 Slick 可能有自己的解决方法
-
不能只重命名伴生对象,然后将重命名对象的内容直接导入案例类吗?或者,您可以手动使您的自定义伴随对象看起来像一个自动生成的对象。
-
是的,但习惯上来说,如果你有处理
Person的全局函数,它们应该在Person命名空间上工作,这就是单例模式的全部目的。带有BigDecimal的全局方法(例如),这些方法附加到BigDecimal,而不是BigDecimalHelpers或类似的东西 -
其实他们并没有消失,看看这个答案stackoverflow.com/a/22368413/1519631。至于为什么
tupled方法“消失”,我不知道。在快速阅读之后,可能取决于它是如何被隐式带入作用域的(这是在内部完成的)。请记住,即使有同伴object,您仍然可以使用case classes。这个问题只是因为我特别需要使用元组方法而出现
标签: scala singleton slick case-class