ruby - 为什么文本 "2e8"在 Mac 上被 YAML 视为字符串,而在 Linux 上的 Ruby 中被视为 float ?

标签 ruby linux osx-lion yaml psych

对于相同的 ruby​​ 版本,相同的 YAML 解析器引擎 Psych(但次要版本不同),但不同的操作系统(Mac 与 Linux),文本 "2e8" 被视为 String 在 Mac 上,但在 Linux 上为 Float (200000000.0)。为什么?我该如何解决才能使它们表现出相同的行为?

  • 对于 Mac:Darwin 12.4.0 Darwin 内核版本 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 上生成的转储的一部分,不会放置这些引号。

最佳答案

造成差异的是 psych 版本。

这是相关的提交:https://github.com/tenderlove/psych/commit/2422a9fc3aeff3c60c6510efbf655a34218c7605

你比最新版本落后了大约两年,所以我建议你是否可以更新你对项目的依赖。

我是怎么找到这个的?使用github优秀的比较功能:https://github.com/tenderlove/psych/compare/v1.2.1...v1.2.2

关于ruby - 为什么文本 "2e8"在 Mac 上被 YAML 视为字符串,而在 Linux 上的 Ruby 中被视为 float ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20903560/

相关文章:

objective-c - 如何使用 libstrophe 构建 jabber 客户端

ruby - 狮子 + Homebrew 软件 : how to fix "config" scripts?

ruby-on-rails - OpenSSL错误–证书验证失败Authorize.net

linux - 共享集群与采用 Intel(R)Core™ i7 的笔记本电脑之间的性能检查

linux - 根据另一个文件的输入在第一个字段中搜索文件并将结果传送到新文件

ios - XCode 4.1 与狮子

ruby - 尽管安装但未找到 rbenv 命令

ruby - 如何将 nginx 设置为 Ruby 应用程序的反向代理(全部在 Docker 中运行)

linux - vm/min_free_kbytes - 为什么保留最小保留内存?

macos - OSX 和 OpenGL 4.x 兼容性