2017-01-13 4 views
0

У меня есть массив: [1, "2", 3.0, ["a", "b"], "dog"]метод to_s не показывает правильный результат

набрав array.to_s в моей командной строке дает мне это:

[1, \"2\", 3.0, [\"a\", \"b\"], \"dog\"]

Что не так, и это, предполагают, чтобы дать мне это:

123.0abdog

ли кто-нибудь объяснить мне почему я не получаю правильный результат?

+2

'to_s' работал как эта спина в Ruby 1.8 дней, но который давно перестали быть вещью. Теперь он ведет себя как 'проверка'. – tadman

+0

Видимо, вы читаете устаревшее учебное пособие для устаревшей версии Ruby. –

ответ

3

Вы, вероятно, хотите присоединиться массив:

[1, "2", 3.0, ["a", "b"], "dog"].join 
=> "123.0abdog" 

to_s работает по-разному, в зависимости от docs, он создает строковое представление массива:

[ "a", "b", "c" ].to_s  #=> "[\"a\", \"b\", \"c\"]" 
+0

OP спрашивал, почему они не получили желаемый результат с 'to_s'. Может быть, объясните, как 'to_s' работает по-другому? –

+0

круто, я думал, тебе придется сначала сгладить, не думаю. –

3

Что это дает вам правильный результат. .to_s только когда-либо возвращает строковое представление объекта, на который вы его вызываете. В этом случае он возвращает то, что выглядит массив при представлении в виде строки. Это не просто означает сглаживание и объединение всех элементов в строку и обычно не означает, что это означает.

Если вы хотите запустить какой-то код, чтобы получить этот результат, попробуйте:

[1, "2", 3.0, ["a", "b"], "dog"].flatten.join 
0

Сначала нужно избавиться от вложенного массива ДБЯ используя выравниваться. Затем вы можете присоединиться к ней в строку.

[1, "2", 3.0, ["a", "b"], "dog"].flatten.join

Смежные вопросы