2012-11-13 2 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 (클래스 Double)의 단항 연산자임을 의미합니다. 그러나 스칼라에서 단항 연산자는 ! ~ - +으로 제한됩니다. 따라서 theres는 당신이 쓰는 문법을 구현할 방법이 없습니다. 단항 연산자 목록이 제한되어 있기 때문에

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

compilator는 단항 연산자 ++ 아니라는 것을 알아야한다 :

하지만 당신은 여전히 ​​괄호를 사용할 수 있습니다 – ayvango

관련 문제