我想创建一个具有底层地图的类.我想支持操作,以便在地图中解析变量.通常我们可以拥有person("height")并使用apply方法来解析地图中的键高并返回它.
我想以这种方式支持要解决的领域.所以person.height从地图返回.但事先并不知道密钥列表.所以我们不能列举所有领域.是否可以使用字段分辨率的默认处理程序?
Mar*_*ila 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 }
}
Run Code Online (Sandbox Code Playgroud)
用法:
val x = new MapBacked("a" -> 1, "b" -> 2)
println(x.a) //prints 1
x.c = 42
println(x.c) //prints 42
Run Code Online (Sandbox Code Playgroud)
您还可以通过定义方法来定义动态解析的applyDynamic方法.
| 归档时间: |
|
| 查看次数: |
128 次 |
| 最近记录: |