Почти для любого объекта x, но обязательно включая Ha sh, вы можете использовать
s=Marshal.dump(x)
, чтобы создать внутреннее представление объекта, имеющего тип String
, и сохранить его. в файл. Если позже вы загрузите String обратно из файла и выполните команду
x=Marshal.load(s)
, вы можете воссоздать свой объект. Я предпочитаю это подходу JSON, описанному Максом Плейнером в его превосходном ответе, потому что (если вы примените его к своему Ha sh) он работает, даже если значения Ha sh являются экземплярами произвольных классов, которые вы создали , где нет стандартного форматирования, предлагаемого JSON. Marshal даже сохраняет / восстанавливает "замороженное" состояние объекта, чего JSON не может сделать.
С другой стороны, недостатком Marshal является то, что вам нужно воссоздавать данные с Программа Ruby, а JSON - это стандартизированный формат, который может обрабатываться другими приложениями. Более того, не гарантируется совместимость формата Marshal между различными основными Ruby версиями, поэтому, если это проблема для вас, не используйте его.
Еще один формат передачи - YAML; концепция такая же, как и в случае с Marshal, но работает немного медленнее, и, как и в случае с JSON, она не работает для произвольных типов внутри вашего Ha sh, если вы сами не предоставите подходящие методы передачи. Как и JSON, YAML можно читать из других приложений, и для людей я считаю его немного легче читать, чем JSON:
require 'yaml'
s = YAML.dump(x)
восстановление с помощью:
x = YAML.load(s)