作爲一種暫時的解決方案,我發現了ya2yaml。不過,這存在一些問題。
- 它沒有閱讀能力。這只是爲了寫作。
- 它沒有完全輸出不受歡迎的Ruby類,並帶有
!ruby/class ...
表示法。在yaml gem中,這個符號被完全使用,所以Ruby類被保存在ruby-yaml-ruby往返中。
- 它使用符號的
!ruby/symbol ...
表示法,這與yaml gem中使用的:...
表示法相比看起來很長。
- 它對散列鍵使用
? ... \n:
yaml語法,與yaml gem更緊湊的散列符號相比,它看起來很長。
問題2不是一個大不了我到目前爲止,所以我用下面的方式YAML和ya2yaml寶石的組合,克服存在的問題1,3,4:
require "yaml" # For reading.
require "ya2yaml" # For writing.
class Object
def to_yaml # Method for writing in yaml
ya2yaml.
# Put hash key on a single line if it is a symbol
gsub(/^(\s*)\? !ruby\/symbol (\S+)\s+/, '\1:\2').
# Use symbol literal
gsub(/(?<=\s)!ruby\/symbol /, ':')
end
end