Как вы структурируете / сериализуете код Ruby?

Я хочу иметь возможность написать лямбда / Proc в своем коде Ruby, сериализовать его, чтобы я мог записать его на диск, а затем выполнить лямбда позже. Вроде как ...

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

Позже, в отдельном выпуске интерпретатора Ruby, я хочу сказать ...

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

Marshal.dump не работает для Procs. Я знаю, что PerlДанные :: Свалка :: Streamerи в Лиспе это тривиально. Но есть ли способ сделать это в Ruby? Другими словами, какова будет реализацияsave<code>_</code>for<code>_</code>later?

редактировать: Мой ответ ниже это хорошо, но не закрывает свободные переменные (например,x) и сериализовать их вместе с лямбдой. Так что в моем примере ...

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

... вывод строки не содержит определения дляx, Есть ли решение, которое учитывает это, возможно, путем сериализации таблицы символов? Можете ли вы получить доступ к этому в Ruby?

Редактировать 2: Я обновил свой ответ, чтобы включить сериализацию локальных переменных. Это кажется приемлемым.

Ответы на вопрос(4)

Ваш ответ на вопрос