我正在写一个小型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接受这种惯例的一些技巧?
答案 0 :(得分:1)
写++ 1.0
表示++
是1.0
的一元运算符(Double类)。但是,在Scala中,一元运算符仅限于! ~ - +
。所以你无法实现你的语法。
但你仍然可以使用括号:
class ExampleStore extends Store {
val a = ++(1.0)
val b = ++(2.0)
val c = ++(3.0)
}