2013-05-26 46 views
18

Dường như cả hai đá quý này thực hiện các tác vụ rất giống nhau. Bất cứ ai có thể đưa ra ví dụ về nơi một viên ngọc sẽ hữu ích hơn đá quý kia? Tôi không có mã cụ thể mà tôi đang đề cập đến, tôi tự hỏi hơn về các trường hợp sử dụng chung cho mỗi viên ngọc. Tôi biết đây là một câu hỏi ngắn, tôi sẽ điền vào chỗ trống theo yêu cầu. Cảm ơn.Sự khác biệt giữa đá quý 'open-uri' và 'Net: HTTP' của Ruby là gì?

+0

Nếu 'open-uri' khớp với tên của nó, nó có thể có nghĩa là nó có thể xử lý các lược đồ khác với' http'. – fge

Trả lời

20

Lý do khiến họ trông giống như họ thực hiện các tác vụ tương tự là OpenURI là trình bao bọc cho Net :: HTTP, Net :: HTTPS và Net :: FTP.

Thông thường, trừ khi bạn cảm thấy mình cần giao diện cấp thấp hơn, việc sử dụng OpenURI tốt hơn khi bạn có thể nhận được ít mã hơn. Sử dụng OpenURI bạn có thể mở một URL/URI và coi nó là một tập tin.

Xem: http://www.ruby-doc.org/stdlib-1.9.3/libdoc/open-uri/rdoc/OpenURI.htmlhttp://ruby-doc.org/stdlib-1.9.3//libdoc/net/http/rdoc/Net.html

+1

Cảm ơn Alex. Xin lỗi, 'wrapper' là gì? –

+9

Trình bao bọc chỉ đơn giản là thư viện sử dụng một hoặc nhiều thư viện khác để tạo giao diện cấp cao hơn, đẹp hơn. Trong trường hợp cụ thể này, OpenURI sử dụng các thư viện Net để hiển thị một giao diện quen thuộc hơn, tức là giao diện đọc từ một tệp. –

3

Tôi chỉ phát hiện ra rằng open làm theo chuyển hướng, trong khi Net::HTTP không, đó là một sự khác biệt quan trọng.

Ví dụ: open('http://www.stackoverflow.com') { |content| puts content.read } sẽ hiển thị HTML thích hợp sau khi theo dõi chuyển hướng, trong khi Net::HTTP.get(URI('http://www.stackoverflow.com')) sẽ hiển thị thông báo chuyển hướng và mã trạng thái 302.

Các vấn đề liên quan