我的模型看起來是這樣的:案例類的構造函數參數給出的元組
abstract class A(id:String, val time:Int) extends Ordered[A]{
override def compare(that:TrackingEvent) = this.time.compare(that.time)
}
case class B(id:String, override val time: Int, x:Int, y:int) extends A(id,time) {
//some methods
}
// more Case Classes who inherit from A
我從MongoDB中得到一些數據,並將它們存儲在某些情況下,類(每類從A繼承)
我目前做的是這樣的:
val header = getHeader(doc) //doc => actual row, return: Tuple2(String,Int)
val xy = getXYDatapoint(doc) // return: Tuple2(Int,Int)
val b = B(header._1,header._2,xy._1,xy._2)
每個繼承類的情況下使用相同的getHeader(DOC)函數來獲得頭。 (這就是爲什麼抽象類A有兩個參數)
我希望它看起來更好,這樣我可以殺死一些行。
喜歡的東西:
val b = B(header+xy)
還是其他什麼東西。我可以改變整個Scala代碼,並會打開任何幫助,讓它看起來更好(我在斯卡拉是新)
我試着用無形的,但沒有奏效:
import shapeless._
import syntax.std.tuple._
val header = getHeader(doc)
val xy = getXY(doc)
val param = header++xy
val b = (B.apply _).tupled(param) // didn't work because param is of type prepend.Out
val b = (B.apply _).tupled(("a",2,3,4)) // would work
當有人知道一些很好的提示或技巧,我很樂意聽到它。
我覺得你的第二點真的很有趣。但是當你有一個需要一個數組的類C時,需要2個字符串的類D,......你還會這樣做嗎? – Boendal
它總是取決於用例。你有C,D等,每種都有不同的數據類型,但都表示標題,或者它們是來自不同的東西(不僅僅是標題)的一大堆'id'和'time's?順便說一句,讓我們不要過度延伸這裏的討論:)我們解決了主要問題(案例類<->元組)。我給了你一個有關設計的暗示,但對於它的進一步問題,我們總是可以在gitter或某個地方見面,或者你可以發佈後續問題。 – slouc
如果您願意,我們可以在這裏討論:https://gitter.im/scala/scala – slouc