Вопрос по взлому синтаксиса компилятора scala - PullRequest
1 голос
/ 22 сентября 2009

Я хочу написать систему, которая допускает синтаксис, подобный следующему:

a b/c

С существующим классом, b является конкретным термином (не произвольной строкой), а c является Int.

Я понимаю, что вы можете сделать

a b c 

, который становится

a.b(c)

Тем не менее, первый синтаксис был бы более элегантным, и любое решение помогло бы мне расширить мои знания по scala

1 Ответ

3 голосов
/ 23 сентября 2009

Если что-то из этого достаточно для вас ...

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

... это поможет:

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

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

и тогда ваш класс может поддержать это следующим образом:

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

Использование:

scala> val a = new A
a: A = A@1c2628

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

scala> a ( Inc / 8 )
res29: Int = 9
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...