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

自从ruby1.9.3以来,Psych是默认的yaml引擎

为什么,为什么心理在其输出中添加换行符? 请查看以下示例。

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" 

你必须配置psych的#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-land进行往返之后,如果数据以与其左侧相同的forms返回,则一切正常。

如果它被序列化然后在解析阶段被破坏,我们就会遇到问题,但这不会发生。

您可以在序列化数据时修改YAML的一些Psych驱动程序的行为。 有关详细信息,请参阅“ 针对Psych to_yaml选项的文档? ”的答案。