加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

澄清YAML语法和Ruby解析

发布时间:2020-12-17 03:05:46 所属栏目:百科 来源:网络整理
导读:我是YAML和 Ruby的新手.我使用以下 Ruby代码来解析YAML文件: obj = YAML::load_file('test.yml') 以下’test.yml’的YAML文件内容是否有效? 情况1: test 在这种情况下,我没有指定test的值(类似于test:true),但我的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}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读