Можно ли определить новый оператор в Groovy? - PullRequest
6 голосов
/ 26 июня 2011

Можно ли определить нового оператора в Groovy?Я хотел бы выразить сделку, где кто-то покупает 200 предметов по цене 10, как это:

def trade = 200 @ 10

Это достижимо?

Спасибо

РЕДАКТИРОВАТЬ: Я хочучтобы было яснее, что я заинтересован в определении оператора, не добавляющего метод.Приветствия.

Ответы [ 3 ]

6 голосов
/ 01 июня 2012

Мы всегда хотели иметь возможность определять оператора через пользователя в Groovy, но до сих пор мы не обошли проблемы, которые сопровождают это. Таким образом, текущее состояние таково, что Groovy не поддерживает пользовательские операторы, только те, которые уже используются.

2 голосов
/ 27 июня 2011

Я не совсем уверен, как вы можете сделать эту работу для знака @, но вы, конечно, можете добавить операцию, подобную этой, что я на самом деле считаю более выразительным:

Number.metaClass.buyFor { Integer price ->
   delegate * price
}

def result = 200.buyFor(10)
println result
0 голосов
/ 27 июня 2011
Number.metaClass."@" {Integer x -> delegate * x} 

assert (2.'@' (2)) == 4
...