Bug in YAML for Ruby?

I’m getting some strange behavior with YAML in ruby regarding the
characters ‘08’ in a hash.

This code:

require ‘yaml’
test = { “08” => ‘01’, ‘01’ => ‘08’, ‘8’ => ‘01’
}
File.open(“test.yml”, “w”) {|f| YAML.dump(test, f)}

produces this file:

“01”: 08
“8”: “01”
08: “01”

I do not understand why the 08s are not quoted. I tried it under ruby
1.8.2 and 1.8.4.

Is this expected?

thanks,
-Matt

On Mar 23, 2006, at 1:57 AM, Matt R. wrote:

produces this file:

“01”: 08
“8”: “01”
08: “01”

I do not understand why the 08s are not quoted. I tried it under ruby
1.8.2 and 1.8.4.

Is this expected?

It is not a bug, but it is confusing. According the the YAML spec[1]
numbers prefixed with a 0 signal an octal base (as does in Ruby).
However 08 is not a valid octal number, so it doesn’t get quoted.

[1] http://yaml.org/type/int.html

– Daniel

Matt R. wrote:

produces this file:

“01”: 08
“8”: “01”
08: “01”

I do not understand why the 08s are not quoted. I tried it under ruby
1.8.2 and 1.8.4.

Is this expected?

I think so. The quotes are needed to disambiguate the string “01” from
the octal number. If quotes were not added by dump, then 01 would be
loaded as the fixnum 1 rather than the string “01”. There’s no ambiguity
with 08 because it is not legal octal, so it must be a string.

irb(main):004:0> YAML.load “foo: 08”
=> {“foo”=>“08”}
irb(main):005:0> YAML.load “foo: 07”
=> {“foo”=>7}
irb(main):006:0> YAML.load “foo: 017”
=> {“foo”=>15}

Note in the last case the conversion from octal.

On Mar 22, 2006, at 7:57 PM, Matt R. wrote:

thanks,
-Matt


Posted via http://www.ruby-forum.com/.

Well just guessing here, but you don’t have to quote 08 because it
couldn’t be an octal number anyway, so it must be a string. I don’t
know if this is why this happens or if this is what the YAML spec
says but it makes sense to me, sorta.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs