2014-03-13 51 views
36

我正在從Slick遷移到Slick 2,而在Slick 2中,您打算在投影到案例類時使用tupled方法(如此處所示http://slick.typesafe.com/doc/2.0.0-RC1/migration.html當伴侶對象在類中時使用.tupled方法

問題是,當案件類有同伴對象,也就是說,如果你有這樣的事情

case class Person(firstName:String,lastName:String) { 

} 

隨着同伴對象

object Person { 
    def something = "rawr" 
} 

在同一範圍內,tupled方法不再有效,因爲它試圖在object上運行tupled,而不是case class

有沒有一種方法來檢索Personcase class而非object,這樣你就可以調用tupled正常嗎?

+0

你絕對需要伴侶對象嗎?另外,我認爲這是一個普通的斯卡拉問題,並不是真正的斯利克相關。 –

+0

是的,我這樣做,除非我想重構我的項目的一半(伴侶對象有很多幫助方法的案例類) 是的,你是對的,它沒有直接關係到光滑,剛剛提到它因爲Slick可能有其自己的解決方法 – mdedetrich

+0

您不能只重命名伴隨對象並將重命名對象的內容直接導入到案例類?或者,您可以使自定義伴隨對象看起來像手動生成的自動伴隨對象。 –

回答

75

你也可以寫

(Person.apply _).tupled 

,以避免重複類型。

+0

這是最優雅的解決方案,歡呼! – mdedetrich

17

這與Alexey Romanov所說的非常相似,但爲了避免在需要tupled時解除apply,我們只是將它添加到我們的伴侶對象中。現在

object Person { 
    def something = "rawr" 
    def tupled = (Person.apply _).tupled 
} 

你可以調用Person.tupled就像你有,如果它沒有一個同伴對象。

2

要構建其他一些註釋,您可以執行以下操作,因爲元組正在調用生成的案例類的默認應用方法。

object Person { 
    ... 
    def tupled = (this.apply _).tupled 
}