2013-05-24 3 views
5

Когда я интерполировать массив строк, она включает в себя символы, спасай кавычки «\"», как бы я интерполировать его без кавычек?рубин, Интерполирующие массив строк

string_array = ["a","b","c"] 
p "#{string_array}"  # => "[\"a\", \"b\", \"c\"]" 
+1

Используйте 'to_s' вместо? Что такое «без цитирования»? – squiguy

+1

@squiguy: Строковая интерполяция просто вызывает 'to_s' в массиве, поэтому он имеет тот же результат. «Без цитирования» означает без кавычек. – messick

+0

В его случае messick, причина, по которой происходит обратная косая черта, заключается в том, что он вызвал проверку на строку, а не на string_array. Метод .inspect для строки и массива отличается. (Я думаю) – Senjai

ответ

3

с использованием p "#{string_array}" такое же, как puts "#{string_array}".inspect

REME mber, потому что р объект такой же, как ставит object.inspect

, который так же, как (в вашем случае, вы назвали р на строку):

puts string_array.to_s.inspect 

(to_s всегда вызывается всякий раз, когда массив попросил что-то стать строкой (чтобы быть напечатанной и еще что-то).

Итак, вы фактически проверяете строку, которая была возвращена массивом, а не сам массив.

Если вы просто хотите распечатать [ «а», «б», «в»] способ сделать что бы использовать p string_array не p "#{string_array}"

, если вы хотите, чтобы объединить все строки в массиве вместе , вы должны использовать String # join для этого. Например. если я хотел поставить запятую и пробел между каждым значением, как Мессик, я хотел бы использовать:

puts string_array.join(", ") 

Это будет вывод: «а, б, в»

+0

DOH! спасибо за этот подробный ответ. полностью забыл p звонки проверяют. ура! – user1297102

+0

NP! Рад, что я мог бы помочь, не забудьте принять ответ, если вы удовлетворены! – Senjai

2

Вы должны join элементы массива.

["a","b","c"].join(', ')

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