Wenn Sie einen maskierten String in YAML speichern möchten, es #inspect
mit entkommen, bevor Sie es zu YAML konvertieren:
irb> require 'yaml'
=> true
irb> str = %{This string's a little complicated, but it "does the job" (man, I hate scare quotes)}
=> "This string's a little complicated, but it \"does the job\" (man, I hate scare quotes)"
irb> puts str
This string's a little complicated, but it "does the job" (man, I hate scare quotes)
=> nil
irb> puts str.inspect
"This string's a little complicated, but it \"does the job\" (man, I hate scare quotes)"
=> nil
irb> puts str.to_yaml
--- This string's a little complicated, but it "does the job" (man, I hate scare quotes)
=> nil
irb> puts str.inspect.to_yaml
--- "\"This string's a little complicated, but it \\\"does the job\\\" (man, I hate scare quotes)\""
=> nil
YAML keine Strings nicht zitieren, es sei denn es hat. Es zitiert Strings, wenn sie Dinge enthalten, dass es vermissen würde, wenn sie es nicht notierte gespeichert - wie Anführungszeichen umgeben oder nachgestellte oder führende Leerzeichen:
irb> puts (str + " ").to_yaml
--- "This string's a little complicated, but it \"does the job\" (man, I hate scare quotes) "
=> nil
irb> puts %{"#{str}"}.to_yaml
--- "\"This string's a little complicated, but it \"does the job\" (man, I hate scare quotes)\""
=> nil
irb> puts (" " + str).to_yaml
--- " This string's a little complicated, but it \"does the job\" (man, I hate scare quotes)"
=> nil
jedoch als YAML Verbraucher, ob der String zitiert sollte keine Rolle spielen für dich. Sie sollten den YAML-Text niemals selbst analysieren - überlassen Sie ihn den Bibliotheken. Wenn Sie die Zeichenfolge in der YAML-Datei zitiert werden müssen, riecht das schlecht zu mir.
Es spielt keine Rolle, ob die Saiten haben '&' s in ihnen wird YAML die Zeichenfolge erhalten:
irb> test = "I'm a b&d string"
=> "I'm a b&d string"
irb> YAML::load(YAML::dump(test))
=> "I'm a b&d string"
irb> YAML::load(YAML::dump(test)) == test
=> true
Wie ich aus der Dokumentation zu verstehen, das ist die einzige Art, wie ich Zeichen halten kann wie die & und: (http://www.yaml.org/YAML_for_ruby.html#single-quoted_strings). Ich speichere URLs in dieser Yaml-Datei, die ich später intakt in Ruby ziehen kann. – neezer