2009-09-22 6 views
1

Je cherche à écrire un système qui permet une syntaxe comme ce qui suit:Question sur la syntaxe du compilateur scala piratage

a b/c 

A étant une classe, b étant un terme spécifique (pas de chaîne arbitraire) et c être un Int.

Je sais que vous pouvez faire

a b c 

qui devient

a.b(c) 

Cependant, la première syntaxe serait plus élégante et toute solution me aider à développer ma connaissance scala :)

Répondre

3

Si l'un d'eux est assez bon pour vous ...

a { b/c } 
a (b/c) 

... cela fera l'affaire:

trait Term { def/(n:Int):(Term,Int) = (this,n) } 

case object Inc extends Term // any other terms declared likewise 

et votre classe pourrait soutenir cette façon:

class A { 
    def apply(t:(Term,Int)) = t match { 
    case (Inc,n) => n + 1 
    // further term implementations 
    } 
} 

Utilisation:

scala> val a = new A 
a: A = [email protected] 

scala> a { Inc/8 } 
res28: Int = 9 

scala> a (Inc/8) 
res29: Int = 9 
Questions connexes