Почему тело ответа стойки является массивом, а не строкой?

классический привет пример из своего документа,

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

у меня вопрос, почему третье значение - [Hello world! & quot;], а не & quot; Hello world & quot ;? Из их документа

The Body must respond to each and must only yield String values. The Body itself should not be an instance of String, as this will break in Ruby 1.9.

Почему тело должно реагировать на каждый? и в каком случае это имеет значение?

 Pavel Veller08 мая 2012 г., 05:46
Я предположил бы, что это может быть буферизовано и затем отправлено кусками тому, кто запросил это. Ответ может быть довольно большим, поэтому серверы «поток» это из. Ваш вопрос более конкретен для предложения о Ruby 1.9, кроме всей итерации по телу?
 nickethier08 мая 2012 г., 05:58
Это также имеет смысл, когда вы думаете о том, как send () и recv () работают в мире Си. Когда вы вызываете recv, вы даете ему адрес буфера символов, который он заполняет. Вы не уверены, что можете получить все тело за один звонок. То же самое верно, когда вы отправляете серию символов.

Ответы на вопрос(2)

The Body itself should not be an instance of String, as this will break in Ruby 1.9.Я предполагаю, что последний элемент ответа должен бытьEnumerable, посколькуStringЕсли вы прекратили включать этот модуль в 1.9, вам понадобится какая-то коллекция, которая его реализует.

Кстати, примеры «Привет, мир!» Часто не подходят для выяснения, почему что-то делается определенным образом, они слишком тривиальны.

Решение Вопроса

что стойка возникла на языке Python. Вот объяснение для Python: http://www.python.org/dev/peps/pep-3333/#buffering-and-streaming

 17 авг. 2016 г., 21:52
Ответы, содержащие только ссылки, не приветствуются, поскольку сайт, на который вы ссылаетесь, может перестать работать или измениться. Пожалуйста, напишите важные моменты здесь.
 08 мая 2012 г., 05:53
право. и когда ваш компонент, который вы вставляете туда, делает что-то большее, чем отправка предварительно созданного массива строк, Rack дает вам хорошийenumerable контракт, чтобы сообщить о вашем прогрессе кусками в ответ наeach, Хотя это может показаться глупым для примера «Привет, мир», это имеет гораздо больше смысла с чем-то более реальным, например, с механизмом шаблонов, наплевывающим на сгенерированный HTML, например.

Ваш ответ на вопрос