【问题标题】:why does psych yaml interpreter add line breaks around 80 characters?为什么 psych yaml 解释器会在 80 个字符左右添加换行符?
【发布时间】:2013-07-25 13:46:33
【问题描述】:

自 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"

【问题讨论】:

标签: ruby yaml psych syck


【解决方案1】:

您必须配置 psych 的 #to_yaml 选项。您很可能会在这里找到它:

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

然后你可以这样做:

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

【讨论】:

  • 谢谢 :) 这成功了。现在我可以继续我快乐的 yamling 了。
【解决方案2】:
yaml.to_yaml(options = {:line_width => -1})

可以解决问题。

但是RuboCop

对变量的无用赋值 - 选项。

所以

yaml.to_yaml(line_width: -1)

更好。

【讨论】:

    【解决方案3】:

    为什么 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 驱动程序序列化数据时修改它的某些行为。有关详细信息,请参阅“Documentation for Psych to_yaml options?”的答案。

    【讨论】:

    • 使用 YAML 的目的是人类可以编辑它。否则,使用它没有多大意义;一些二进制格式会更好。而且由于人类可能会编辑文件,因此关心 YAML 格式的外观是有道理的。
    • 不保证数据将以准确的形式存储。我知道没有序列化程序可以做到这一点。 YAML 以合理可编辑/可读的形式存储它,比编组或 JSON 更具可读性。
    猜你喜欢
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-30
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多