Можно ли определить новый оператор в Groovy?


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

def trade = 200 @ 10

Достижимо ли это?

Спасибо

EDIT: я хочу прояснить, что меня интересует определение оператора, а не добавление метода. Овации.

3 6

3 ответа:

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

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

def result = 200.buyFor(10)
println result

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

Number.metaClass."@" {Integer x -> delegate * x} 

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