2011-04-25 10 views

Respuesta

8

Esta pregunta se relaciona con:

como Andrew me sugirió cuando le pregunté al primero en esta lista. Mediante el uso de la gema 'sourcify', se puede conseguir algo cerca del bloque, pero no es exactamente el mismo:

require 'sourcify' 

def block_to_s(&blk) 
    blk.to_source(:strip_enclosure => true) 
end 

puts block_to_s { 
    str = "Hello" 
    str.reverse! 
    print str 
} 

En anteriormente, el aviso que o bien tiene que poner paréntesis alrededor del argumento de puts (block_to_s .. end) o use {...} en lugar de do ... end debido a la fuerza de la conectividad como se discutió repetidamente en stackoverflow.

Esto le dará:

str = "Hello" 
str.reverse! 
print(str) 

lo que equivale al bloque original como un script Ruby, pero no la misma cadena exacta.

+4

En Ruby 2.0 puede imprimir un proceso como una cadena con #source. #to_source ya no funciona. – mpiccolo

+0

Necesitas incluir la gema 'method_source' (y necesitarás estar en un archivo, no funcionó para mí de irb) – Nick

Cuestiones relacionadas