我正在尝试编写一个通用方法来遍历case类的字段:case class PriceMove(price: Double, delta: Double)
def log(pm : PriceMove) { info("price -> " + price + " delta -> " + delta)}
我需要使log
能够处理任何案例类。log
仅用于处理案例类的参数类型和实际的通用字段迭代代码需要什么?
最佳答案
好吧,考虑到我所附的两个问题,这是我要使用的:
object Implicits {
implicit class CaseClassToString(c: AnyRef) {
def toStringWithFields: String = {
val fields = (Map[String, Any]() /: c.getClass.getDeclaredFields) { (a, f) =>
f.setAccessible(true)
a + (f.getName -> f.get(c))
}
s"${c.getClass.getName}(${fields.mkString(", ")})"
}
}
}
case class PriceMove(price: Double, delta: Double)
object Test extends App {
import Implicits._
println(PriceMove(1.23, 2.56).toStringWithFields)
}
这将产生:
PriceMove(price -> 1.23, delta -> 2.56)
关于scala - 案例类字段的简单迭代,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23128433/