3

私はnewScala の演算子、特に DSL の演算子が好きではありませんでした。なし でオブジェクトを構築するための回避策newは、通常、非常に醜いものです。たとえば、 をインポートscala.actors.Actor._するとactor { ... }、 がありますが、本体内では にアクセスできないthis: Actorため、そのオブジェクトにはreceivereactself、 などのあらゆる種類の疑似インスタンス メソッドもあります。

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ますか?

4

1 に答える 1

2

私はこれがうまくいくとは思わないので、

{
   text = "test"
   doSomething()
}

トレイトの外側にはメソッドがなくtext、メソッドもないため、コンパイルされません。マクロは現在、すでに型チェックされている式でのみ機能します。doSomething()Button

于 2012-08-26T12:39:25.483 に答える