为什么机架响应体不是字符串?

ez.*_*ez. 19 ruby rack

他们的文档中的经典hello world示例,

class HelloWorld
  def call(env)
    return [200, {}, ["Hello world!"]]
  end
end
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么第三个值是[Hello world!"],而不是"Hello world"?来自他们的文档,

Body必须响应每个,并且只能产生String值.Body本身不应该是String的实例,因为这将在Ruby 1.9中破坏.

为什么身体需要对每个人做出反应?在什么情况下重要?

小智 9

我认为机架起源于python的wsgi.以下是python的解释:http: //www.python.org/dev/peps/pep-3333/#buffering-and-streaming

  • 对。并且当您插入的组件所做的不仅仅是发送预先构建的字符串数组时,Rack 会为您提供一个很好的“可枚举”合约,以响应“each”以块的形式报告您的进度。虽然对于 hello world 示例来说它可能看起来很傻,但对于更真实的东西来说它更有意义,例如模板引擎吐出我们生成的 HTML,例如 (2认同)
  • 不鼓励仅提供链接的答案,因为您链接的站点可能会关闭或更改。请在此处写下重点。 (2认同)

Mic*_*ohl 6

从句子来看The Body itself should not be an instance of String, as this will break in Ruby 1.9.,我假设响应的最后一个元素必须是一个Enumerable.由于Strings在1.9中停止包含此模块,因此您需要某种实现它的集合.

顺便说一句:你好世界的例子往往不是很好地弄清楚为什么某些东西以某种方式完成,它们太琐碎了.