14

Psych は Ruby 1.9.3 以降のデフォルトの 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"
4

3 に答える 3

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

問題を解決しても大丈夫です。

しかしルボコップは言う

変数への無駄な代入 - オプション。

それで

yaml.to_yaml(line_width: -1)

優れている。

于 2015-10-21T10:14:59.003 に答える
-2

データをシリアル化するときに、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 ランドを往復した後、データが元の形式で返されれば、すべて問題ありません。

シリアル化され、解析段階で破損すると問題が発生しますが、そうはなりません。

データをシリアル化するときの YAML の Psych ドライバーの動作の一部を変更できます。詳細については、「 Documentation for Psych to_yaml options? 」の回答を参照してください。

于 2013-07-25T14:01:27.500 に答える