我从不喜欢
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
?