2012-01-12 51 views
11

对于数组,当我输入:为什么Array.to_s返回括号?

puts array[0] 

==> text 

然而,当我键入

puts array[0].to_s 

==> ["text"] 

为什么括号和引号?我错过了什么?

附录:我的代码看起来像这样

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

在'array'是什么?你在谈论哪个Ruby版本(在1.8和1.9之间有区别) – Amadan 2012-01-12 03:05:15

+0

向我们展示你的数组的定义 – 2012-01-12 03:05:40

+0

把这个放在你的问题中;这是难以辨认的。 – 2012-01-12 03:12:22

回答

2

您需要向我们展示了正则表达式来真正解决这个问题正确,但这会做它:

替换此

partial_url = page_array[0].to_s 

与此

partial_url = page_array[0][0] 
+0

谢谢!那样做了。但你是对的,这是一个正则表达式问题。 – user1144553 2012-01-12 03:56:19

1

这并不一定修复为什么你得到一个翻番,达阵,但你可以将其铺平,然后调用这样的第一要素。

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

压扁取出堆叠阵列,并创建一个水平,所以如果你有[1,2,[3,[4,5,6]]],并呼吁压平就可以了,你会得到[1,2,3,4,5,6]

它也比做array[0][0]更加健壮,因为,如果你有两个以上的数组嵌套在第一个元素中,则会遇到同样的问题。

Iain是正确的,但没有看到正则表达式,我们不能指出根本原因。

12

to_s只是检查Array类的别名。

不是说这意味着很多,而不是期待array.to_s返回一个字符串,它实际上返回的是array.inspect,它基于方法的名称并不真正在寻找什么。

如果你想只是 “胆” 的尝试:

page_array.join 

如果有多个元素的数组:

这将使:

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

回报:

"test this function" 

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

"[\"test\"]" 
20

此打印数组是没有括号

array.join(", ")