Почему интерпретатор psych yaml добавляет разрывы строк около 80 символов?

Psych - это движок yaml по умолчанию с ruby ​​1.9.3.

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

ruby -v # => ruby 1.9.3p374 (2013-01-15 revision 38858) [x86_64-linux]
require 'yaml'

"this absolutely normal sentence is more than eighty characters long because it IS".to_yaml
# => "--- this absolutely normal sentence is more than eighty characters long because it\n    IS\n...\n"

YAML::ENGINE.yamler = 'syck'

"this absolutely normal sentence is more than eighty characters long because it IS".to_yaml
# => "--- this absolutely normal sentence is more than eighty characters long because it IS\n"

3 ответа

Решение

Вам нужно будет настроить параметры psy #to_yaml. Скорее всего, вы найдете его здесь:

ruby-1.9.3-p125/ext/psych/emitter.c

И тогда вы можете сделать что-то вроде этого:

yaml.to_yaml(options = {:line_width => -1})
yaml.to_yaml(options = {:line_width => -1})

это нормально, чтобы решить проблему.

но RuboCop говорят

Бесполезное присвоение переменной - опции.

так

yaml.to_yaml(line_width: -1)

лучше.

Почему имеет значение, переносит ли YAML строку или нет, когда сериализует данные?

Вопрос в том, сможет ли YAML восстановить правильную строку позже, когда он перезагрузит файл? И, ответ, да, он может:

require 'yaml'
puts '"' + YAML.load("this absolutely normal sentence is more than eighty characters long because it IS".to_yaml) + '"'

Какие выводы:

"this absolutely normal sentence is more than eighty characters long because it IS"

Данные, которые были сериализованы, имеют формат, понятный YAML. Это важная концепция, так как данные на тот момент были YAML. Мы можем связываться с ним в редакторе и добавлять / вычитать / редактировать, но данные по-прежнему YAML, потому что они должны перезагружать и анализировать данные, чтобы наши приложения могли их использовать. Итак, после того, как данные совершают круговую передачу по YAML-земле, если данные возвращаются в той же форме, в которой они вышли, то все в порядке.

У нас была бы проблема, если бы она была сериализована, а затем повреждена на этапе анализа, но этого не происходит.

Вы можете изменить поведение драйвера Psych YAML при сериализации данных. См. Ответы на " Документация для параметров Psych to_yaml?" Для получения дополнительной информации.

Другие вопросы по тегам