为什么Array.to_s返回括号?

时间:2012-01-12 03:03:46

标签: ruby regex arrays html-parsing

对于数组,当我输入:

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"]

4 个答案:

答案 0 :(得分:20)

按不带括号的方式打印数组

array.join(", ")

答案 1 :(得分:12)

to_s只是检查Array类的别名。

并不是说这意味着很多,而不是期望array.to_s返回一个字符串,它实际上返回了array.inspect,它基于方法的名称,并不是你真正想要的。

如果您只想要“胆量”,请尝试:

page_array.join

如果数组有多个元素:

page_array.join(" ")

这将使:

page_array = ["test","this","function"]

返回:

"test this function"

Array上返回的“to_s”取决于您正在使用的Ruby版本,如上所述。 1.9.X回报:

"[\"test\"]"

答案 2 :(得分:2)

你需要告诉我们正则表达式才能真正解决这个问题,但是这样做了:

替换此

partial_url = page_array[0].to_s

用这个

partial_url = page_array[0][0]

答案 3 :(得分:1)

这并不一定能解决为什么你得到一个双重数组,但是你可以将它展平,然后像这样调用第一个元素。

page_array = page.scan(/regex/).flatten

展平会取出堆叠数组并创建一个级别,因此如果您有[1,2,[3,[4,5,6]]]并且在其上调用展平,则会得到[1,2,3,4,5,6]

它比执行array[0][0]更强大,因为如果你在第一个元素中嵌套了两个以上的数组,那么你会遇到同样的问题。

虽然Iain是正确的,但没有看到正则表达式,我们无法找出根本原因。