【发布时间】:2014-01-21 02:49:24
【问题描述】:
对于相同的 ruby 版本,相同的 YAML 解析器引擎 Psych(但不同的次要版本),但不同的操作系统(Mac 与 Linux),文本 "2e8" 在 Mac 上被视为 String 但在 Float ( 200000000.0) 在 Linux 上。为什么?我该如何解决它,以便它们显示相同的行为?
-
对于 Mac:Darwin 12.4.0 达尔文内核版本 12.4.0:root:xnu-2050.24.15~1/RELEASE_X86_64 x86_64
require "yaml" RUBY_VERSION # => "1.9.3" YAML::ENGINE.yamler # => "psych" Psych::VERSION # => "1.2.2" Psych.load("2e8") # => "2e8" YAML.load("2e8") # => "2e8" YAML.load("'2e8'") # => "2e8" -
对于 Linux:Linux 2.6.18-238.el5 #1 SMP x86_64 GNU/Linux
require "yaml" RUBY_VERSION # => "1.9.3" YAML::ENGINE.yamler # => "psych" Psych::VERSION # => "1.2.1" Psych.load("2e8") # => 200000000.0 YAML.load("2e8") # => 200000000.0 YAML.load("'2e8'") # => "2e8"
我知道添加引号 '2e8' 会产生相同的行为,但此文本是在 Mac 上生成的转储的一部分,它没有添加这些引号。
【问题讨论】:
-
它没有回答您的问题,但作为参考,对于 ruby 2.0(和 Psych 版本 2.0.0),我在 linux 上得到了所需的字符串
"2e8"。 -
Psych 版本不同,如果在 Linux 上指定 1.2.2 版本会怎样?
-
psych是基于 3d 方库libyaml构建的,所以如果它是动态加载的,那么它的版本也是相关的。
标签: ruby linux osx-lion yaml psych