【发布时间】:2017-02-23 10:07:09
【问题描述】:
我的模型看起来像这样:
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 代码,并愿意寻求任何帮助,让它看起来更好(我是 Scala 新手)
我尝试过使用 shapeless,但没有成功:
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
如果有人知道一些不错的提示或技巧,我很乐意听到。
【问题讨论】:
标签: scala tuples shapeless case-class