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

17

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

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

у меня вопрос, почему третье значение - [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.

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

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

Ваш Ответ

2   ответа
8

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

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

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

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

Похожие вопросы