2017-05-29 88 views
1

我是Groovy中的新成員,之前我只完成了C#和C++,所以我在習慣使用Java的時候遇到了一些問題,特別是我們用於項目的Groovy。所以這個問題涉及到Groovy。Groovy中的基本操作符重載

我想:

  • 創建一個新的X類:
class X { 
     double val 
} 
  • 超載基本運算符(+, - ,*,/,**等)變量的類X

問題是: - 在Groovy我可以重載運營商級的X包括一個屬性 - 值(即雙)

X plus(X obj){ 
    X newobj = new X(this.val + obj.val) 
    return newobj 
} 

X plus(double obj){ 
    X newobj = new X(this.val + obj) 
    return newobj 
} 

但我怎麼做,如果雙賓語是第一的位置(左邊)除?像:

double a X b X result = a + b // it will not work because operator + of a is not overloaded to provide addition of b

我需要重載這樣的事情,但對於雙運營商?:

ArrayList.metaClass.plus << {Collection b -> 
    [delegate, b].transpose().collect{x, y -> x+y} 
} 

Overloading + operator for arrays in groovy

有人說也許有添加的方式方法作爲閉包訪問元類?

不幸的是,數組的例子是我在互聯網上找到的最接近的答案。希望有一種方法!

回答

0

是的,你可以重新定義它爲雙:Double.metaClass.plus = {...}

當心!在groovy

def d0 = 2.1 
println d0.getClass() // java.math.BigDecimal 

double d1 = 2.1 
println d1.getClass() // java.lang.Double 
+0

感謝它的工作!我不知道的問題是一些語言限制。我們不是在純粹的Groovy上工作,而是爲GPU編程開發的,所以我可以在Groovy中運行它,但測試不能在GPU上運行。所以我已經定義了啞函數而不是重載:) –