2012-01-12 39 views
11

Đối với một mảng, khi tôi gõ:Tại sao Array.to_s trả về dấu ngoặc vuông?

puts array[0] 

==> text 

Tuy nhiên, khi tôi gõ

puts array[0].to_s 

==> ["text"] 

Tại sao các dấu ngoặc và dấu ngoặc kép? Tôi đang thiếu gì?

PHỤ LỤC: mã của tôi trông như thế này

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 

những gì tôi nhận được hình như:

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

Có gì trong file 'array'? Và bạn đang nói về phiên bản Ruby nào (có sự khác biệt ở đây giữa 1.8 và 1.9) – Amadan

+0

Hiển thị định nghĩa mảng của bạn –

+0

Đặt điều đó vào câu hỏi của bạn; không thể đọc được. –

Trả lời

2

Bạn cần phải cho chúng ta thấy regex để thực sự khắc phục điều này đúng, nhưng điều này sẽ làm nó:

Thay thế này

partial_url = page_array[0].to_s 

với điều này

partial_url = page_array[0][0] 
+0

Cảm ơn bạn! Điều đó đã làm điều đó. Nhưng bạn nói đúng, đó là một vấn đề regex. – user1144553

1

này không nhất thiết phải sửa chữa tại sao bạn đang nhận được một mảng tăng gấp đôi-up, nhưng bạn có thể san bằng nó và sau đó gọi các yếu tố đầu tiên như thế này.

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

dẹt lấy ra mảng xếp chồng lên nhau và tạo ra một cấp, vì vậy nếu bạn có [1,2,[3,[4,5,6]]] và gọi là san bằng vào nó, bạn sẽ nhận được [1,2,3,4,5,6]

Nó cũng là mạnh hơn so với làm array[0][0], bởi vì, nếu bạn có nhiều hơn hai mảng được lồng trong phần tử đầu tiên, bạn sẽ gặp phải vấn đề tương tự.

Iain là chính xác mặc dù, mà không nhìn thấy regex, chúng tôi không thể gây ra nguyên nhân gốc rễ.

12

to_s chỉ là bí danh để kiểm tra lớp Array.

Không phải điều này có nghĩa là nhiều hơn thay vì mong đợi mảng.to_s trả về một chuỗi nó thực sự trở về array.inspect, dựa trên tên của phương thức, không thực sự là những gì bạn đang tìm kiếm.

Nếu bạn muốn chỉ là "ruột" try:

page_array.join 

Nếu có nhiều yếu tố để các mảng:

Điều này sẽ làm:

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

trở lại:

"test this function" 

Những gì "to_s" trên một mảng trả về, phụ thuộc vào phiên bản Ruby bạn đang sử dụng như đã đề cập ở trên. 1.9.lợi nhuận X:

"[\"test\"]" 
20

này in mảng như là không có dấu ngoặc

array.join(", ") 
Các vấn đề liên quan