加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala动态字段名为x

发布时间:2020-12-16 18:27:53 所属栏目:安全 来源:网络整理
导读:只需实现一个Dynamic对象(使用2.10.0-M3): import language.dynamicsobject D extends Dynamic { def selectDynamic( field : String ) = Symbol( field )} 以下工作正常并且符合预期 object DynamicTest extends App { println( D.a )} 印刷’a 但是,如果
只需实现一个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如此特别?我做了些蠢事?

解决方法

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

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

返回预期的

res2: Symbol = 'x

我本来希望重新定义一个名为CompleteDynamic的特性来做这个“x”变量覆盖,但我暂时无法做到.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读