1. ホーム
  2. syntax

[解決済み] YAMLです。YAML の文字列には引用符が必要ですか?

2022-03-17 02:29:45

質問

Railsプロジェクトの国際化のために、YAML辞書を書こうとしています。しかし、あるファイルでは文字列がダブルクォートで表示され、あるファイルではダブルクォートで表示されないため、少し混乱しています。検討すべきいくつかのポイントがあります。

  • 例1 - はすべてダブルクォーテーションを使用します。
  • 例2 - 最後の2つを除いて、引用符を使用していない文字列です。
  • YAMLクックブック は言う。 文字列を二重引用符で囲むと、ASCII文字やUnicode文字をエスケープして表現することができます。 これは、ある文字をエスケープしたいときだけ二重引用符を使えばいいということでしょうか?もしそうなら、なぜ最初の例ではどこでも二重引用符を使うのでしょうか。統一性のため/文体上の理由だけなのでしょうか。
  • 例2の最後の2行は ! - は非特定タグですが、最初の例の最後の2行はそうではなく、どちらも動作します。

私の質問は、YAMLで異なるタイプの引用符を使用するためのルールは何ですか?

といえるのでしょうか。

  • 一般に、引用符は必要ありません。
  • 文字をエスケープしたい場合は、二重引用符を使用します。
  • 使用 ! をシングルクォーテーションで囲むと... ?

解決方法は?

質問で引用されたYAMLクックブックの簡単なレビューといくつかのテストの後、私の解釈は以下のとおりです。

  • 一般的には、引用符は必要ありません。
  • 引用符は、文字列を強制するために使用します。 10 が、FixnumではなくStringを返したい場合は、次のように記述します。 '10' または "10" .
  • 値に特殊文字が含まれる場合は、引用符を使用してください(例. : , { , } , [ , ] , , , & , * , # , ? , | , - , < , > , = , ! , % , @ , \ ).
  • シングルクォートでは、文字列の中にほとんどすべての文字を入れることができ、エスケープコードの解析も行いません。 '\n' という文字列が返されます。 \n .
  • 二重引用符はエスケープコードを解析します。 "\n" は改行文字として返されます。
  • 感嘆符はメソッドを紹介するもので、例えば !ruby/sym でRubyのシンボルを返します。

必要なとき以外は引用符を使わず、特にエスケープコードを処理したいとき以外はシングルクォートを使うのがベストだと思います。

更新情報

Yes" と "No" は引用符(シングルまたはダブル)で囲む必要があり、さもなければ TrueClass と FalseClass の値として解釈されます。

en:
  yesno:
    'yes': 'Yes'
    'no': 'No'