2009-04-20 10 views

Odpowiedz

6

Nie 100%. Ruby-Bloki wymagają podania wszystkich parametrów (o ile wiem). Blok w Groovy, który nie określa parametrów, ma jeden domyślny parametr, it.

+0

Niepoprawnie. Groovy obsługuje parametry nazwane do zablokowania. Zobacz: http://groovy.codehaus.org/JN2515-Closures#JN2515-Closures-ClosureParameters – jiggy

+3

Oczywiście Groovy obsługuje nazwane parametry do bloków. :-) Moim komentarzem jest, że w Groovy, jeśli twój blok przyjmuje jeden parametr, nazywanie go jest opcjonalne --- podczas gdy w Ruby jest obowiązkowe. –

+0

Przepraszam, źle odczytałem :) – jiggy

1

Blok jest w pewnym sensie tylko funkcją anymonalną. Nigdy nie programowałem java, ale oto kilka przykładów kodu dla innych języków, aby pokazać, że bloki są podobne do przekazywania anonimowych funkcji.

Ruby:

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 

Innymi słowy, jeśli Java obsługuje anonimowe funkcje tak, masz sobie blok! Ponieważ są funkcjami, mogą przyjmować argumenty, podobnie jak bloki. Oto kolejny przykład Lua:

local function add_something(callback) 
    callback(5/2); 
end 

add_something(function(a) 
    print(a + 5); 
end) 
-- 7.5 
0

Nie jestem w 100% zaznajomiony z Ruby, ale myślę, że odpowiedź brzmi nie. Spójrz na doc.

Powiązane problemy