scala - 案例类字段的简单迭代

标签 scala case-class

我正在尝试编写一个通用方法来遍历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/

相关文章:

scala - 在 Scala 中返回多个值的函数

scala - “using”函数

scala - 使用 json4s 在 under_score 和 camelCase 格式之间进行选择

java - sbt 版本从 Maven Central 中的文件夹结构生成

scala - Scala 中的密封类

Scala - 使用伴随对象作为函数接受 block 的速记参数

Scala 案例类在接收方法中不匹配(在 akka Actor 中)

scala - Haskell 的 mapM 相当于 Scala 猫

scala - 如何定义具有未绑定(bind)类型参数的成员的案例类?

scala - 具有案例类的双向引用