¿Cómo encordar / serializar código Ruby?

Quiero poder escribir un lambda / Proc en mi código de Ruby, serializarlo para poder escribirlo en el disco y luego ejecutar el lambda. Algo así como...

x = 40
f = lambda { |y| x + y }
save_for_later(f)

Más adelante, en una ejecución separada del intérprete de Ruby, quiero poder decir ...

f = load_from_before
z = f.call(2)
z.should == 42

Marshal.dump no funciona para Procs. Sé que Perl tieneData :: Dump :: Streamer, y en Lisp esto es trivial. ¿Pero hay una manera de hacerlo en Ruby? En otras palabras, ¿cuál sería la implementación desave<code>_</code>for<code>_</code>later?

Editar: Mi respuesta abajo Es bueno, pero no se cierra sobre las variables libres (comox) y serializarlos junto con la lambda. Así que en mi ejemplo ...

x = 40
s = save_for_later { |y| x + y }
# => "lambda { |y|\n  (x + y)\n}"

... la salida de cadena no incluye una definición parax. ¿Hay alguna solución que tenga esto en cuenta, quizás al serializar la tabla de símbolos? ¿Puedes acceder a eso en Ruby?

Editar 2: Actualicé mi respuesta para incorporar la serialización de variables locales. Esto parece aceptable.

Respuestas a la pregunta(4)

Su respuesta a la pregunta