我从不喜欢newScala 中的运算符,尤其是 DSL。没有 构建对象的解决方法new通常非常难看。例如,如果你 import scala.actors.Actor._,你有actor { ... },但在 body 内部你不能访问this: Actor,所以在那个对象中也有各种各样的伪实例方法,比如receive、react、self等等。
使用 Scala 2.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?