2012-05-08 10 views
17

klasyczny przykład Hello World z ich doc,Dlaczego ciało odpowiedzi szafy nie jest łańcuchem?

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

moje pytanie jest dlaczego trzecia wartość jest [Hello world! "], A nie "Hello world"? Z ich doc,

ciało musi odpowiedzieć na każdy i musi jedynie uzyskując wartości String. sam korpus nie powinien być instancją String, jak to pęknie w Ruby 1.9.

Why potrzeb organizmu odpowiedzieć na każde? i w jakim przypadku ma to znaczenie?

+0

Założę się, że może być buforowany, a następnie wysyłany w porcjach do każdego, kto o to poprosi. Odpowiedź może być dość duża, więc serwery "przesyłają" ją strumieniowo. czy twoje pytanie bardziej przypomina klauzulę o Rubim 1.9 niż cała iteracja nad ciałem? –

+0

Ma również sens, gdy myślisz o tym, jak send() i recv() działają w świecie C. Kiedy wywołujesz recv, nadajesz mu adres bufora znaków, który wypełnia. Nie jesteś pewien, aby uzyskać całe ciało w jednym połączeniu. To samo dotyczy wysyłania serii znaków. – nickethier

Odpowiedz

8

Myślę, że stojak pochodzi z pligi Pythona. Oto wyjaśnienie dla Pythona: http://www.python.org/dev/peps/pep-3333/#buffering-and-streaming

+1

w prawo. a kiedy twój komponent, w którym się w nim znajdujesz, robi coś więcej niż wysyłanie gotowych tablic ciągów, Rack daje ci przyjemną "wyliczalną" umowę do zgłaszania twoich postępów w porcjach w odpowiedzi na "każdy". Chociaż może wyglądać głupio na przykład z Witaj świecie, to ma sens z czymś bardziej realnym, np. Mechanizmem szablonowym plującym na nasz wygenerowany kod HTML, na przykład –

+1

Odpowiedzi dotyczące linków są odradzane, ponieważ witryna, z którą się łączysz, może zostać zerwana lub zmiana. Proszę tutaj wpisać ważne punkty. –

6

Sądząc po zdaniu The Body itself should not be an instance of String, as this will break in Ruby 1.9., to zakładam, że ostatni element odpowiedzi musi być Enumerable. Od String s zatrzymany tym module w 1.9, będziesz potrzebować jakiegoś rodzaju kolekcji, która go implementuje.

Przy okazji: witaj przykłady z całego świata często nie są dobre, aby dowiedzieć się, dlaczego coś jest zrobione w określony sposób, są zbyt trywialne.

Powiązane problemy