Scala动态字段名为x

时间:2012-06-07 16:23:41

标签: scala scala-2.10

只需实现一个Dynamic对象(使用2.10.0-M3):

import language.dynamics
object D extends Dynamic {
    def selectDynamic( field : String ) = Symbol( field )
}

以下工作正常且符合预期

object DynamicTest extends App {
    println( D.a )
}

打印'a

但是,如果我试试这个:

object DynamicTest extends App {
    println( D.x )
}

我得到了令人讨厌的错误:

[error] DynProb.scala:7: type mismatch;
[error]  found   : D.type
[error]  required: ?{val x: ?}
[error] Note that implicit conversions are not applicable because they are ambiguous:
[error]  both method any2Ensuring in object Predef of type [A](x: A)Ensuring[A]
[error]  and method any2ArrowAssoc in object Predef of type [A](x: A)ArrowAssoc[A]
[error]  are possible conversion functions from D.type to ?{val x: ?}
[error]     println( D.x )
[error]              ^
[error] one error found

为什么x如此特别?我做了些蠢事?

1 个答案:

答案 0 :(得分:0)

我现在提出了一个简单的解决方案:

import language.dynamics
object D extends Dynamic {
    def selectDynamic( field : String ) = Symbol( field )
    def x = selectDynamic("x")
}
D.x

返回预期的

res2: Symbol = 'x

我本来希望重新定义一个名为CompleteDynamic的特征来做这个“x”变量覆盖,但我暂时不能。