2009-04-20 11 views

Respuesta

6

No 100%. Los bloques de Ruby requieren que nombre todos sus parámetros (hasta donde yo sé). Un bloque en Groovy que no especifica parámetros tiene un parámetro implícito, it.

+0

Incorrecto. Groovy admite parámetros nombrados para bloquear. Ver: http://groovy.codehaus.org/JN2515-Closures#JN2515-Closures-ClosureParameters – jiggy

+3

Por supuesto, Groovy admite parámetros con nombre para los bloques. :-) Mi comentario es que en Groovy, si tu bloque toma un parámetro, nombrarlo es opcional --- mientras que en Ruby es obligatorio. –

+0

Lo siento, lo leí mal :) – jiggy

1

Un bloque es, en cierto sentido, simplemente una función anónima. Nunca he programado Java, pero aquí hay algunos ejemplos de código para otros idiomas que le muestran que los bloques son similares a pasar funciones anónimas.

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 

En otras palabras, si Java soporta funciones anónimas por el estilo, usted se consiguió un bloque! Como son funciones, pueden tomar argumentos, al igual que los bloques. Aquí hay otro ejemplo de Lua:

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

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

No estoy 100% familiarizado con Ruby, pero creo que la respuesta es no. Eche un vistazo al doc.

Cuestiones relacionadas