澄清YAML语法和Ruby解析
我是YAML和
Ruby的新手.我使用以下
Ruby代码来解析YAML文件:
obj = YAML::load_file('test.yml') 以下’test.yml’的YAML文件内容是否有效? 情况1: test 在这种情况下,我没有指定test的值(类似于test:true),但我的Ruby解析代码不会引发错误.我认为这是一个无效的YAML语法. 案例2: :test : true 在这种情况下,Ruby代码将test视为符号而不是字符串,当我执行obj [:test]时,它将结果返回为“true”.这是Ruby的东西吗?其他语言会将其解释为字符串“:test”? 案例3: :test : true :test : false 在这种情况下,我的Ruby代码不是为重新定义:test而抛出错误,而是采用最新值:test(这是假的).为什么是这样? YAML语法是否允许重新定义元素,在这种情况下只获取最新值? 解决方法
情况1:YAML允许
unquoted scalars或“裸”字符串未用引号括起来.与引用的字符串相比,它们不太灵活,因为您不能在不创建模糊语法的情况下使用某些字符,但Ruby解析器确实支持它们.
1.9.3-p448 > YAML::parse('test').to_ruby => "test" 案例2:正如您所猜测的那样,这是特定于Ruby的,因为YAML没有“符号”的概念.将YAML mapping转换为Ruby哈希时,以冒号开头的标量键被解释为符号而不是字符串. 情况3:根据YAML对mapping的定义,键必须是唯一的,因此在给出您的示例时,严格的解析器应该抛出错误.看起来Ruby解析器更宽松,并允许使用last-value-wins规则多次定义相同的密钥.在本机Ruby哈希中也允许这样做. 1.9.3-p448 > YAML::parse("test: truentest: false").to_ruby => {"test"=>false} 1.9.3-p448 > { 'test' => true,'test' => false } => {"test"=>false} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |