【发布时间】:2014-07-17 21:29:15
【问题描述】:
当我尝试在一个空符号上往返 YAML 时,它变成了不同的东西:
require "yaml"
YAML.load(:"".to_yaml) # => ":"
- 这是一个错误还是有意为之?
-
在 YAML 中表达空符号的正确方法是什么?
yamlgem 提供以下信息::"".to_yaml # => "--- ! ':'\n"这是正确的吗? (如果是,则说明从 YAML 到 Ruby 的过程中出现问题。如果不是,则说明从 Ruby 到 YAML 的过程中出现问题。)
字符串或非空符号往返成功:
YAML.load("".to_yaml) # => ""
YAML.load("a".to_yaml) # => "a"
YAML.load(:a.to_yaml) # => :a
更新
我刚刚将此作为错误报告给Ruby。
【问题讨论】:
-
这可能是一个错误? (评论,因为我不确定),但是使用 yaml gem 玩弄东西:
YAML.load("--- :'' \n") # => :"" -
这意味着 YAML 到 Ruby 工作正常,但 Ruby 到 YAML 不是。
-
在 YAML 中使用符号时要小心,因为其他语言不支持它们。 YAML 应该是可移植的,所以我认为你遇到的是一个特定于 Ruby 的极端情况,我会犹豫不决。
-
@theTinMan 谢谢,我会记住这一点。但是 Ruby 应该选择返回错误、将其转换为带有警告的字符串,或者正确执行。
-
我不确定“正确”是什么,因为根本不支持符号。我同意 Ruby 应该出于可移植性原因将其标记为错误,也许可以使用允许使用非可移植扩展(例如符号)的选项。