Joel VanderWerf
3/23/2006 1:48:00 AM
Matt R. wrote:
> 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?
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.
--
vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407