2011-06-26 96 views
6

是否可以在Groovy中定義一個全新的運算符?我想表達如果有人購買了200項的10的價格像這樣的行業:是否可以在Groovy中定義一個新的運算符?

def trade = 200 @ 10 

這是可以實現的?

感謝

編輯:我想更清楚地表明我感興趣的定義運營商不加入的方法。乾杯。

+3

不,目前這是不可能的,你必須使用現有的操作員來定義你自己的操作 –

+0

+很好的問題:) –

+0

看來,[Spock Boys](http://code.google.com/p/) spock/wiki/Interactions#Return_values)已經設法用一個'>>>'運算符來完成它,這個運算符在[運算符重載](http://groovy.codehaus.org/Operator+Overloading)先生。 Muschko](http://stackoverflow.com/users/528428/benjamin-muschko)。 有人可以解釋它是如何做到的或提供一個definitve否?我很害怕我覺得我不能接受當前的答案。 感謝您的支持與我。 –

回答

2

我不太清楚你如何使這項工作爲@跡象,但你一定可以添加這樣的操作,我居然找到更多的表現:

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

def result = 200.buyFor(10) 
println result 
+0

感謝您的意見。不幸的是,這並不能真正回答我的問題。我知道我可以通過「猴子補丁」添加方法,但我真的想定義一個運算符。 –

+1

看起來像'@'符號還不支持[可重載操作符](http://groovy.codehaus.org/Operator+Overloading)。如果您可以爲任何可用的操作員解決問題,則可以按照上述說明執行操作。 –

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

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

感謝您的參與。你很近,但沒有雪茄。正如我提到的本,我正在尋找一個問題的答案是否可以定義一個新的OPERATOR不添加方法。 –

6

我們一直想要的能力通過Groovy中的用戶定義一個操作符,但到目前爲止,我們還沒有解決隨之而來的問題。所以目前的狀態是Groovy不支持自定義操作符,只有那些已經被使用的操作符。

+0

這個答案寫了3年了。對此狀態有任何改變? – kinbiko

+1

沒有......並且在沒有資金的情況下明年不太可能改變 – blackdrag

相關問題