我是一個時髦的新手。也許這是小菜一碟,但我想超載+運算符陣列/列表像這樣的代碼Groovy中的數組重載+運算符
def a= [1,1,1]
def b= [2,2,2]
assert [3,3,3] == a + b
我是一個時髦的新手。也許這是小菜一碟,但我想超載+運算符陣列/列表像這樣的代碼Groovy中的數組重載+運算符
def a= [1,1,1]
def b= [2,2,2]
assert [3,3,3] == a + b
我不會推薦全球覆蓋完善的行爲。但是,如果你堅持,這是不行的,你問:
ArrayList.metaClass.plus << {Collection b ->
[delegate, b].transpose().collect{x, y -> x+y}
}
一個更加本地化的替代方法是使用一個類別:
class PlusCategory{
public static Collection plus(Collection a, Collection b){
[a, b].transpose().collect{x, y -> x+y}
}
}
use (PlusCategory){
assert [3, 3, 3] == [1, 1, 1] + [2, 2, 2]
}
不過,我可能會創建一個通用的zipWith方法(如在功能編程中),允許人們輕鬆指定不同的行爲...
Collection.metaClass.zipWith = {Collection b, Closure c ->
[delegate, b].transpose().collect(c)
}
assert [3, 3, 3] == [1, 1, 1].zipWith([2, 2, 2]){a, b -> a+b}
assert [2, 2, 2] == [1, 1, 1].zipWith([2, 2, 2]){a, b -> a*b}
或'[[1,1,1],[2,2,2]]。轉置()。collect {it.sum()}' – 2010-12-14 23:39:37
@tim_yates - 尼斯,我沒有考慮在那裏使用sum。我想如果一個人想要真正的頹廢,可以縮寫爲:[[1,1,1],[2,2,2]]。轉置()*。sum() – Northover 2010-12-14 23:56:18
+1 cool!很好的使用傳播運算符:-) – 2010-12-15 00:20:50
什麼是實際問題? – Puppy 2010-12-14 20:00:53
我如何爲列表重載+運算符? – JulioCM 2010-12-14 20:04:05