2

我想创建一个具有基础地图的类。我想支持这样的操作,以便在地图中解析变量。通常我们可以有person("height")一个 apply 方法来解析地图中的关键高度并返回它。

我想支持以这种方式解决的字段。所以person.height从地图返回。但是事先不知道密钥列表。所以我们不能枚举所有字段。是否有可能拥有字段解析的默认处理程序?

4

1 回答 1

11

您可能需要动态类型:

http://www.scala-lang.org/api/current/index.html#scala.Dynamic

导致在 Scala 2.10 中添加动态类型的 SIP:http: //docs.scala-lang.org/sips/pending/type-dynamic.html

这是一个简单的示例,允许您创建具有动态字段分辨率的对象:

class MapBacked(initial: (String, Any)*) extends Dynamic {

  private val fields = mutable.HashMap[String, Any](initial: _*)

  // x.field translates to x.selectDynamic(field)
  def selectDynamic(field: String): Any = fields(field)

  // x.field = value translates to x.updateDynamic(field)(value)
  def updateDynamic(field: String)(arg: Any) = { fields(field) = arg }

}

用法:

val x = new MapBacked("a" -> 1, "b" -> 2)
println(x.a) //prints 1
x.c = 42
println(x.c) //prints 42

您还可以通过定义方法来定义动态解析的applyDynamic方法。

于 2013-10-28T09:21:00.527 回答