2012-05-08 34 views
17

một ví dụ hello world cổ điển từ doc của họ,Tại sao cơ thể trả lời giá một mảng không phải là một chuỗi?

class HelloWorld 
    def call(env) 
    return [200, {}, ["Hello world!"]] 
    end 
end 

câu hỏi của tôi là lý do tại sao giá trị thứ ba là [Hello world! "], Không phải là "Hello world"? Từ tài liệu của họ,

Các cơ thể phải đáp ứng với mỗi và chỉ phải mang giá trị string. các cơ thể bản thân không phải là một thể hiện của string, vì điều này sẽ phá vỡ trong của Ruby 1.9.

tại sao nhu cầu cơ thể để trả lời từng câu hỏi? và trong trường hợp nào thì nó quan trọng?

+0

Tôi sẽ giả định sao cho nó có thể được lưu vào bộ đệm và sau đó được gửi theo khối cho bất kỳ ai yêu cầu. Phản hồi có thể khá lớn để các máy chủ "truyền" nó ra. câu hỏi của bạn có cụ thể hơn với mệnh đề về Ruby 1.9 ngoài toàn bộ sự lặp lại trên cơ thể không? –

+0

Nó cũng có ý nghĩa khi bạn nghĩ về cách gửi() và recv() làm việc trong thế giới C. Khi bạn gọi recv bạn cung cấp cho nó một địa chỉ cho một bộ đệm của các ký tự mà nó lấp đầy. Bạn không chắc chắn để có được toàn bộ cơ thể trong một cuộc gọi. Điều này cũng đúng khi bạn gửi một chuỗi ký tự. – nickethier

Trả lời

8

Tôi nghĩ giá có nguồn gốc trên wsgi của python. Đây là giải thích cho python: http://www.python.org/dev/peps/pep-3333/#buffering-and-streaming

+1

. và khi thành phần của bạn mà bạn gắn bó ở đó làm điều gì đó hơn là gửi một chuỗi các chuỗi dựng sẵn, Rack cung cấp cho bạn một hợp đồng 'enumerable' tốt đẹp để báo cáo tiến trình của bạn theo khối để trả lời' each'. Mặc dù nó có vẻ ngớ ngẩn cho một ví dụ thế giới hello, nó có ý nghĩa hơn với một cái gì đó thực tế hơn, giống như một công cụ mẫu nhổ HTML được tạo của chúng ta, ví dụ: –

+1

Câu trả lời chỉ liên kết được khuyến khích vì trang web mà bạn đang liên kết có thể đi xuống hoặc thay đổi. Hãy viết những điểm quan trọng ở đây. –

6

Đánh giá từ câu The Body itself should not be an instance of String, as this will break in Ruby 1.9., tôi cho rằng phần tử cuối cùng của phản hồi phải là Enumerable. Kể từ khi String s ngừng bao gồm mô-đun này trong 1.9, bạn sẽ cần một số loại bộ sưu tập thực hiện nó.

BTW: xin chào các ví dụ trên thế giới thường không tuyệt vời để tìm ra lý do tại sao một số thứ được thực hiện theo một cách nhất định, chúng quá tầm thường.

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