2012-01-12 79 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(", ") 
相關問題