2012-01-12 16 views
11

Na tablicy, gdy wpisuję:Dlaczego Array.to_s zwraca nawiasy?

puts array[0] 

==> text 

Jednak po wpisaniu

puts array[0].to_s 

==> ["text"] 

dlaczego nawiasy i cytaty? czego mi brakuje?

Uzupełnienie: mój kod wygląda następująco

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 

co dostaję wygląda następująco:

http://www.stackoverflow/["questions"] 
+2

Co masz w 'array'? I o której wersji Ruby mówisz (jest tu różnica między 1.8 a 1.9) – Amadan

+0

Pokaż nam definicję twojej tablicy –

+0

Połóż to w swoim pytaniu; to jest nieczytelne. –

Odpowiedz

2

Musisz pokazać nam regex naprawdę naprawić to poprawnie, ale to zrobi to:

Wymień ten

partial_url = page_array[0].to_s 

z tym

partial_url = page_array[0][0] 
+0

Dziękujemy! Tak było. Ale masz rację, to był problem z wyrażeniem regularnym. – user1144553

1

To niekoniecznie naprawić dlaczego otrzymujesz podwoiła się tablicę, ale można spłaszczyć je, a następnie zadzwonić do pierwszego elementu takiego.

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

Spłaszczenie wyjmuje ułożone tablice i tworzy jeden poziom, więc jeśli miał [1,2,[3,[4,5,6]]] i nazywa spłaszczyć na to, co można uzyskać [1,2,3,4,5,6]

Jest również bardziej wytrzymałe niż robi array[0][0], bo gdybyś miał więcej niż dwie tablice zagnieżdżone w pierwszym elemencie, natrafisz na ten sam problem.

Iain ma rację, ale nie widząc regex, nie możemy wydobyć z niego głównej przyczyny.

12

to_s to tylko alias do sprawdzenia dla klasy Array.

Nie znaczy to, że jest to coś innego niż oczekiwanie, że array.to_s zwróci ciąg znaków, który faktycznie zwraca właściwość array.inspect, która na podstawie nazwy metody nie jest tak naprawdę tym, czego szukasz.

Jeśli chcesz tylko "wnętrzności" try:

page_array.join 

Jeśli istnieje wiele elementów do tablicy:

to uczyni:

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

powrotny:

"test this function" 

To, co "to_s" na tablicy zwraca, zależy od wersji Ruby, której używasz, jak wspomniano powyżej. 1.9.X powraca:

"[\"test\"]" 
20

Ten wydrukować tablicę jak jest bez nawiasów

array.join(", ")