2014-03-29 164 views
0

如果此問題的措辭錯誤,我很抱歉,我對Scala和強類型語言非常陌生。向自定義類型添加方法

基本上我使用油滑和代碼發生器輸出每個表(表VideoCaptions在這種情況下)以下行:

type VideoCaptionsRow = HCons[Int,HCons[Option[String],HCons[Option[Boolean],HCons[Option[Boolean],HCons[Option[String],HCons[java.sql.Timestamp,HCons[Int,HCons[Option[String],HNil]]]]]]]] 
/** Constructor for VideoCaptionsRow providing default values if available in the database schema. */ 
def VideoCaptionsRow(id: Int, audioLanguage: Option[String] = None, hasCaptionFile: Option[Boolean] = Some(false), isDeleted: Option[Boolean] = Some(false), language: Option[String] = None, lastModified: java.sql.Timestamp, videoId: Int, regions: Option[String]): VideoCaptionsRow = { 
    id :: audioLanguage :: hasCaptionFile :: isDeleted :: language :: lastModified :: videoId :: regions :: HNil 
} 

當我在光滑的桌子VideoCaptions執行查詢我回來一個VideoCaptionsRow類型的對象(它顯然是巨型HCons類型的縮寫)。我想向VideoCaptionsRow對象添加一個方法,以便我可以在查詢結果行上調用它。有沒有辦法改變類型定義,以便它不僅僅是HCons類型的簡寫,還包括一個額外的方法,同時Slick內部仍然可以使用它?

+0

你檢查了他們的['code generation'](http://slick.typesafe.com/doc/2.0.1/code-generation.html)頁面嗎?我沒有看到任何提及的行或scaladocs或代碼示例。那麼'<>'[mapping](http://slick.typesafe.com/doc/2.0.1/migration.html#mapped-tables)以及如何創建一個包含有用函數的伴隨對象的case類你看起來沒有> 22列)。 (我還沒有使用2.0,所以我想知道如果''''映射會爲你「強制」行類型)。 – n0741337

回答

2

您可以定義一個隱式類來擴展您自己代碼中的功能。無需更改代碼生成器。

implicit class VideoCaptionsRowExtensions(row: VideoCaptionsRow){ 
    def foo = row(0) // <- e.g. alias the first HList entry as def foo, or compute something 
} 
VideoCaptions.filter(...).run.map(_.foo) // access new member `foo` 
+0

謝謝,這正是我需要的! – superadamwo