我从不喜欢new
Scala 中的运算符,尤其是 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
?