私は小さなDSLを書いています。他の観点からカスタム制御構造として使用することもできます。
ここに小さな例があります
case class Reference(var value : Double) {
def apply() = value
def update(v : Double) = value = v
}
implicit def toReference(ref:Reference) = ref.value
trait Store {
import scala.collection.mutable.Buffer
val index : Buffer[Reference] = Buffer()
def ++ (v : Double) : Reference = {
val r = Reference(v)
index += r
r
}
implicit def toSelf(u : Unit) = this
}
class ExampleStore extends Store {
val a = () ++ 1.0
val b = () ++ 2.0
val c = () ++ 0.5
}
val store = new ExampleStore
store.c() = store.a + store.b
前置なしでクラス演算子にアクセスしたいのですthis
が、少なくとも式の開始時に指定する以外の方法が見つかりませんでし()
た。「プレフィックス」フォームが必要です
この例を次のように書き換える方法
class ExampleStore extends Store {
val a =++ 1.0
val b =++ 2.0
val c =++ 0.5
}
scalaにそのような慣例を受け入れさせるためのトリックを考えられる人はいますか?