Ответ 1
Отпечатать массив без скобок
array.join(", ")
Для массива, когда я печатаю:
puts array[0]
==> text
Но когда я печатаю
puts array[0].to_s
==> ["text"]
Почему скобки и кавычки? Что мне не хватает?
ADDENDUM: мой код выглядит следующим образом
page = open(url) {|f| f.read }
page_array = page.scan(/regex/) #pulls partial urls into an array
partial_url = page_array[0].to_s
full_url = base_url + partial_url #adds each partial url to a consistent base_url
puts full_url
то, что я получаю, выглядит следующим образом:
http://www.stackoverflow/["questions"]
Отпечатать массив без скобок
array.join(", ")
to_s - это просто псевдоним для проверки класса Array.
Не то, чтобы это означало многое другое, чем вместо того, чтобы ожидать, что array.to_s вернет строку, которая фактически возвращает array.inspect, который, основываясь на имени метода, на самом деле не является тем, что вы ищете.
Если вам нужны только "кишки", попробуйте:
page_array.join
Если в массив есть несколько элементов:
page_array.join(" ")
Это сделает:
page_array = ["test","this","function"]
Возврат:
"test this function"
То, что возвращает "to_s" в массиве, зависит от версии Ruby, которую вы используете, как указано выше. 1.9.X возвращает:
"[\"test\"]"
Вам нужно показать нам регулярное выражение, чтобы действительно исправить это правильно, но это сделает это:
Замените это
partial_url = page_array[0].to_s
с этим
partial_url = page_array[0][0]
Это не обязательно означает, что почему вы получаете удвоенный массив, но можете сгладить его, а затем вызвать первый элемент, подобный этому.
page_array = page.scan(/regex/).flatten
Сглаживание вынимает многоуровневые массивы и создает один уровень, поэтому, если у вас есть [1,2,[3,[4,5,6]]]
и вызывается сглаживание на нем, вы получите [1,2,3,4,5,6]
Он также более устойчив, чем выполнение array[0][0]
, поскольку, если у вас было больше двух массивов, вложенных в первый элемент, вы столкнулись бы с той же проблемой.
Iain корректен, хотя, не видя регулярное выражение, мы не можем объяснить основную причину.