2012-10-07 15 views
17

Quiero guardar un "bloque de código" en una variable para ser reutilizado, algo así como:cómo almacenar el código Ruby bloques

block = do 
|test| puts test 
end 

3.upto(8) block 

Puede alguien mostrar qué estoy haciendo así que obviamente mal? (O si es simplemente imposible)

Respuesta

24

Hay muchas maneras de hacer esto en Ruby, uno de los cuales consiste en utilizar una Proc:

foo=Proc.new do |test| 
    puts test 
end 

3.upto(8) { foo.call("hello world") } 

Leer más sobre Proc:

actualización, el método anterior se podría reescribir de la siguiente manera:

# using lower-case **proc** syntax, all on one line 
foo = proc { |test| puts test } 
3.upto(8) { foo.call("hello world") } 

# using lambda, just switch the method name from proc to lambda 
bar = lambda { |test| puts test } 
3.upto(8) { bar.call("hello world") } 

Básicamente son métodos muy similares, con diferencias sutiles.

Y, por último, es probable que haya formas más elegantes de hacer lo que he esbozado, sea bueno escuchar a alguien de una mejor manera. Espero que esto ayude.

+2

Muchas gracias. Para el enlace aún más. ¿Puedes ser tan amable de incluir una mención de lambdas también? Para propósito histórico. –

+0

@Shingetsu, agregué y actualicé con lambda, así como una versión ligeramente simplificada del enfoque de proc también – stephenmurdoch

+3

@Shingetsu: las lambdas no son históricas. Deberías casi * siempre * usarlos en lugar de Procs. Son mucho más completos y son el estándar. – Linuxios

Cuestiones relacionadas