2012-11-13 41 views
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但找不到比表情開始指定至少()其他方式。 A「前綴」形式是什麼,我需要

一些方法來重寫這個例子如下

class ExampleStore extends Store { 
    val a =++ 1.0 
    val b =++ 2.0 
    val c =++ 0.5 
} 

誰能想到一些技巧,使斯卡拉接受這樣的約定?

回答

1

寫入++ 1.0表示++1.0(double類)的一元運算符。但是,斯卡拉一元運營商限於! ~ - +。所以theres是沒有辦法實現你which的語法。

但你仍然可以使用括號:

class ExampleStore extends Store { 
    val a = ++(1.0) 
    val b = ++(2.0) 
    val c = ++(3.0) 
} 
+0

compilator應該知道++是不是一個一元運算符,因爲一元運算符列表是有限的 – ayvango