代码之家  ›  专栏  ›  技术社区  ›  0__

宏采用类主体,消除显式新运算符?

  •  3
  • 0__  · 技术社区  · 12 年前

    我从不喜欢 new Scala中的运算符,尤其是DSL。构造对象的变通方法 没有 通常都很难看。例如,如果导入 scala.actors.Actor._ ,你有 actor { ... } ,但在你无法接触到的身体内部 this: Actor ,所以该对象中也有各种伪实例方法,比如 receive , react , self

    有了Scala2.10宏,我想知道是否有机会实现以下功能?

    object Button {
      def apply(body: ? ): Button = macro applyImpl(body)
      def applyImpl(c: Context)(body: c.Expr[ ? ]): c.Expr[Button] = ?
    }
    trait Button {
      def text: String
      def text_=(s: String): Unit
      def doSomething(): Unit
    }
    
    Button {
      text = "test"
      doSomething()
    }
    

    作为一个额外的挑战,如果 doSomething protected ?

    1 回复  |  直到 11 年前
        1
  •  2
  •   Kim Stebel    12 年前

    我认为这行不通,因为

    {
       text = "test"
       doSomething()
    }
    

    不会编译,因为没有 text 没有 doSomething() 的外部方法 Button 特质宏当前只能处理已进行类型检查的表达式。