Можно ли получить тот же результат из командной строки, что и при использовании усов из IRB?
Нет, вы не можете.
Причина, по которой вы получаете разные результатыв том, что в IRB вы передаете рубиновый хеш-объект , имеющий два ключа.Ключ :wrapped
является экземпляром proc
.
В YAML, OTOH, у вас есть оба значения в виде строк .YAML имеет очень ограниченную поддержку хранения объектов, и я не знаю ни одного расширения, позволяющего сериализацию proc
s.Наивная попытка не работает:
{wrapped: proc { |text| "<b>#{text}</b>" }}.to_yaml
#⇒ "---\n:wrapped: !ruby/object:Proc {}\n"
Очевидно, что при загрузке обратно, это станет NOOP.Вы можете взломать это поведение с помощью чего-то вроде:
YAML.load_file('/path/to/your/file.yaml').
map { |k, v| [k, v.start_with?('proc') ? eval(v) : v] }.
to_h[:wrapped].('Hi!')
#⇒ "<b>Hi!</b>"
Но я настоятельно рекомендую этого не делать.