为什么Array.to_s返回括号?

对于数组,当我输入:

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是正确的,但没有看到正则表达式,我们无法找出根本原因。