W jaki sposób ciągnąć / serializować kod Ruby?

Chcę być w stanie napisać lambda / Proc w moim kodzie Ruby, serializować go, aby móc zapisać go na dysku, a następnie wykonać lambdę później. Coś w rodzaju...

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

Później, w oddzielnym uruchomieniu interpretera Ruby, chcę móc powiedzieć ...

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

Marshal.dump nie działa dla Procs. Wiem, że Perl maDane :: Dump :: Streamer, aw Lisp jest to trywialne. Ale czy można to zrobić w Ruby? Innymi słowy, jaka byłaby realizacjasave<code>_</code>for<code>_</code>later?

Edytować: Moja odpowiedź poniżej jest ładny, ale nie zamyka się na wolnych zmiennych (jakx) i serializować je razem z lambda. Więc w moim przykładzie ...

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

... wyjście łańcucha nie zawiera definicji dlax. Czy istnieje rozwiązanie, które bierze to pod uwagę, być może poprzez serializację tabeli symboli? Czy możesz uzyskać do niego dostęp w Ruby?

Edytuj 2: Zaktualizowałem swoją odpowiedź, aby włączyć serializowanie zmiennych lokalnych. To wydaje się do przyjęcia.

questionAnswers(4)

yourAnswerToTheQuestion