私はnew
Scala の演算子、特に DSL の演算子が好きではありませんでした。なし でオブジェクトを構築するための回避策new
は、通常、非常に醜いものです。たとえば、 をインポートscala.actors.Actor._
するとactor { ... }
、 がありますが、本体内では にアクセスできない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
ますか?