为什么`[]。to_s.empty?`在ruby 1.9和2.0之间表现不同?

时间:2015-01-19 19:00:02

标签: ruby ruby-1.9 ruby-2.0

这是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红宝石,但路径搞砸了。它指出了图像上的1.8.7版本的红宝石。当我修改路径指向右边的红宝石(2.1.4)时,我看到了正确的行为。

1 个答案:

答案 0 :(得分:1)

在2.x中,这是[].to_s

的输出
2.1.5 :001 > [].to_s
 => "[]"
2.1.5 :002 > [43,43].to_s
 => "[43, 43]"

鉴于它与您的Ruby设置不匹配,肯定会在您的系统中更改它。

尝试启动简单明了的irb会话。如果它像我上面所示的那样工作,那就意味着你的Ruby应用程序出了问题。

如果它不起作用,则表示Ruby设置中存在错误。

无论问题出在哪里,我都想知道你为什么依赖像

这样的代码
[].to_s.empty?

我无法找到上述代码有意义的单一案例。如果要检查数组中是否存在某个项目,只需使用

[].empty?

如果要将数组视为字符串,请使用可能的合理方法进行转换,例如join

[].join("").empty?