Это было поведение в 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"
Меня интересует это изменение поведения для метода to_s
в версии 2.0.
Редактировать: Мои извинения. Я закрываю этот вопрос. По какой-то причине я думал, что использую 2.x.x ruby, но путь был перепутан. Он указывал на версию ruby 1.8.7, которая была на изображении. Когда я исправил путь, указывающий на правильный рубин (2.1.4), я вижу правильное поведение.
[].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
? - person mu is too short   schedule 19.01.2015x
в2.0.x
? Был ли где-нибудь регрессto_s
к поведению 1.8.7? Вы уверены, что используете 2.0.x, а не 1.8.7? 1.8.7 дает именно те результаты, которые вы заявляете для 2.0.x. - person mu is too short   schedule 19.01.2015RUBY_VERSION
для теста 2.0.x? - person tadman   schedule 19.01.2015to_s
был изменен на псевдоним inspect. Единственное изменение, о котором я знаю, это то, что при вызовеto_s
дляArray
в 1.9.3 он вернетto_s
метод(ы) объектов, содержащихся внутри, но в 2.0 он вернетinspect
этих объектов. напримерclass Frog; def to_s "monkey" end; end
. В 1.9.3.[Frog.new].to_s #=> "[monkey]"
и в 2.0[Frog.new].to_s #=> "[#<Frog:0x00000002f28828>]"
, но я не могу воспроизвести то, что вы показываете, как утверждали другие. Поэтому, еслиArray#to_s
иHash#to_s
не были переопределены в пустые строки, ваши выводы неверны. - person engineersmnky   schedule 20.01.2015empty?
. Вы должны сравнить результаты, такие как[].to_s
,{}.to_s
безempty?
. Это сделало бы вопрос более ясным. - person sawa   schedule 20.01.2015