0

我正在尝试在 Scala 中创建结构类型以避免定义中间类。本质上,我只想定义一个结构,它将被编组/解组到/从 JSON 字符串。

例如,描述如下 JSON

{
    "query": {
        "range" : {
            "number" : {
                "gte": 123, 
                "lte": 456
            }
        }
    }
}

我有一个相应的结构类型:

  //structural
  type NumberRange = {val range: {val number: {val gte: Long; val lte: Long}}}

  //named
  case class NumberRangeQuery(query: NumberRange)

  //instance
  val nrq: NumberRangeQuery = ???

创建实例的正确方法是NumberRangeQuery什么?

4

2 回答 2

0

在这种情况下,答案不是使用结构类型,而是花精力使用案例类并使代码更具可读性和效率:

case class Number(gte: Long, lte: Long)
case class Range(number: Number)
case class Query(range: Range)
case class NumberRangeQuery(query: Query)

val nrq: NumberRangeQuery = NumberRangeQuery(
  Query(
    Range(
      Number(1, 3)
    )
  )
)

在这种情况下,为什么你会选择结构类型而不是具体类型?

于 2019-05-07T17:26:18.513 回答
-2

要创建实现结构类型的类的内联实例,您可以使用以下方法:

//instance
  val nrq: NumberRangeQuery = NumberRangeQuery(new {
    val range = new {
      val number = new {
        val gte = 1: Long 
        val lte = 3: Long
      }
    }
  })

请注意,实例化“匿名”结构类型至少有 2 个惩罚:

1) 可以说是可读的代码
2) Scala 将在运行时使用反射在此类实例上调度方法(在此处讨论

于 2019-05-07T10:10:38.033 回答