只需实现一个Dynamic对象(使用2.10.0-M3):
import language.dynamics
object D extends Dynamic {
def selectDynamic( field : String ) = Symbol( field )
}
Run Code Online (Sandbox Code Playgroud)
以下工作正常并且符合预期
object DynamicTest extends App {
println( D.a )
}
Run Code Online (Sandbox Code Playgroud)
印刷'a
但是,如果我试试这个:
object DynamicTest extends App {
println( D.x )
}
Run Code Online (Sandbox Code Playgroud)
我得到了令人讨厌的错误:
[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
Run Code Online (Sandbox Code Playgroud)
为什么x如此特别?我做了些蠢事?
我现在想出了一个简单的解决方案:
import language.dynamics
object D extends Dynamic {
def selectDynamic( field : String ) = Symbol( field )
def x = selectDynamic("x")
}
D.x
Run Code Online (Sandbox Code Playgroud)
返回预期的结果
res2: Symbol = 'x
Run Code Online (Sandbox Code Playgroud)
我很想重新定义一个名为的特征CompleteDynamic来覆盖这个“x”变量,但我暂时不能。
| 归档时间: |
|
| 查看次数: |
433 次 |
| 最近记录: |