【发布时间】:2015-01-19 19:00:02
【问题描述】:
这是 1.9 ruby 中的行为:
[].to_s.empty? #=> false
{}.to_s.empty? #=> false
[].to_s #=> "[]"
{}.to_s #=> "{}"
[43,43].to_s #=> "[43, 43]"
{"fire"=>"water"}.to_s #=> "{\"fire\"=>\"water\"}"
这是 2.0 ruby 中的行为:
[].to_s.empty? #=> true
{}.to_s.empty? #=> true
[].to_s #=> ""
{}.to_s #=> ""
[43,43].to_s #=> "4343"
{"fire"=>"water"}.to_s #=> "firewater"
我想知道 2.0 中 to_s 方法的这种行为变化。
编辑:我很抱歉。我正在结束这个问题。出于某种原因,我以为我正在运行 2.x.x ruby,但路径搞砸了。它指向图像上的 1.8.7 版本的 ruby。当我修复指向正确 ruby (2.1.4) 的路径时,我看到了正确的行为。
【问题讨论】:
-
这不是正确的行为。 2.0 的行为应该与 1.9.3 完全相同。检查您是否没有为 ruby 或 irb 加载任何扩展。
-
具体来说,您测试的是 1.9 的哪个版本?
-
[].to_s在 2.2、2.1、2.0 和 1.9.3 中是'[]',所以他们都不应该说[].to_s是空的。您的[43,43].to_s和{"fire"=>"water"}.to_s在 2.0.x 中也很奇怪,那么您的to_s方法有什么问题? -
那么
2.0.x中的x是什么?某处是否有to_s回归到 1.8.7 行为?您确定您使用的是 2.0.x 而不是 1.8.7? 1.8.7 准确地给出了您为 2.0.x 声明的结果。 -
这看起来根本不对。
RUBY_VERSION对 2.0.x 测试有什么作用?