gpt4 book ai didi

scala - 如何在 Scala 中进行默认方法处理

转载 作者:行者123 更新时间:2023-12-01 11:25:31 24 4
gpt4 key购买 nike

我想创建一个具有底层 map 的类。我想支持在 map 中解析变量的操作。通常我们可以有 person("height") 并有一个 apply 方法来解析 map 中的键高度并返回它。

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

最佳答案

你可能想要动态类型:

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 方法来定义动态解析的方法。

关于scala - 如何在 Scala 中进行默认方法处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19630700/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com