我在Ruby中使用塊,並希望在Java中使用它們。 Groovy似乎提供了一個類似的功能,但我對Groovy瞭解是否在語法和功能方面有任何顯着差異方面知之甚少。Ruby與Groovy中的塊之間是否有任何顯着差異?
Ruby塊等價於Groovy塊嗎?
我在Ruby中使用塊,並希望在Java中使用它們。 Groovy似乎提供了一個類似的功能,但我對Groovy瞭解是否在語法和功能方面有任何顯着差異方面知之甚少。Ruby與Groovy中的塊之間是否有任何顯着差異?
Ruby塊等價於Groovy塊嗎?
不是100%。 Ruby塊要求你命名所有參數(據我所知)。 Groovy中沒有指定參數的塊有一個隱含參數,it
。
塊在某種意義上只是一種任意的功能。我從來沒有編寫java程序,但是這裏有一些其他語言的代碼示例,告訴你程序塊類似於傳遞匿名函數。
紅寶石:
def add_5
puts yield + 5
end
add_5 { 20 }
# => 25
的Javascript:
var add_5 = function(callback){
return callback.call() + 5;
}
add_5(function(){ return 20 });
// returns 25
的Lua:
local function add_5(callback)
print(callback() + 5);
end
add_5(function()
return 20;
end)
-- returns 25
換句話說,如果Java支持這樣的匿名函數,你擁有屬於自己的塊!由於它們是功能,它們可以像塊一樣接受爭論。這裏是另一個Lua的例子:
local function add_something(callback)
callback(5/2);
end
add_something(function(a)
print(a + 5);
end)
-- 7.5
我對Ruby不是100%熟悉,但我認爲答案是否定的。看看doc。
錯誤。 Groovy確實支持命名參數來阻止。請參閱:http://groovy.codehaus.org/JN2515-Closures#JN2515-Closures-ClosureParameters – jiggy 2009-04-22 19:54:25