1

我正在编写一个小型 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 接受这样的约定吗?

4

1 回答 1

1

写作++ 1.0意味着它++1.0(Double 类)的一元运算符。但是,在 Scala 中,一元运算符仅限于! ~ - +. 所以没有办法实现你想要的语法。

但是你仍然可以使用括号:

class ExampleStore extends Store {
  val a = ++(1.0)
  val b = ++(2.0)
  val c = ++(3.0)
}
于 2012-11-13T07:23:01.810 回答