Ruby 为什么psych yaml解释器在80个字符左右添加换行符?

Ruby 为什么psych yaml解释器在80个字符左右添加换行符?,ruby,yaml,psych,syck,Ruby,Yaml,Psych,Syck,自ruby 1.9.3以来,Psych是默认的yaml引擎 为什么,为什么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 # =&g

自ruby 1.9.3以来,Psych是默认的yaml引擎

为什么,为什么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"

为什么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 land进行往返之后,如果数据返回的形式与它离开时的形式相同,那么一切都正常

如果它在解析阶段被序列化并损坏,我们会遇到问题,但这不会发生


当YAML序列化数据时,您可以修改它的一些Psych驱动程序的行为。有关更多信息,请参阅“”的答案。

您必须配置psych的“到”yaml选项。您很可能会在这里找到:

ruby-1.9.3-p125/ext/psych/emitter.c
然后你可以这样做:

yaml.to_yaml(options = {:line_width => -1})
可以解决这个问题

但是RuboCop说

对变量选项的无效赋值

所以


更好。

使用YAML的目的是人类可以编辑它。否则,使用它就没有多大意义;一些二进制格式会更好。而且,由于人类可能会编辑文件,因此(某些)关注YAML格式的外观是有意义的。不能保证数据将以精确的形式存储。据我所知,没有一个序列化程序能做到这一点。YAML以合理的可编辑/可读形式存储它,这比编组或JSON更具可读性。这有点像是“谢谢:)的复制品,这就成功了。现在我可以继续我的快乐亚明了。
yaml.to_yaml(options = {:line_width => -1})
yaml.to_yaml(line_width: -1)