Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 为什么机架响应体是数组而不是字符串?_Ruby_Rack - Fatal编程技术网

Ruby 为什么机架响应体是数组而不是字符串?

Ruby 为什么机架响应体是数组而不是字符串?,ruby,rack,Ruby,Rack,一个来自他们医生的经典hello world示例 class HelloWorld def call(env) return [200, {}, ["Hello world!"]] end end 我的问题是为什么第三个值是[Hello world!”,而不是“Hello world”?从他们的文档中 class HelloWorld def call(env) return [200, {}, ["Hello world!"]] end end 主体必须响应

一个来自他们医生的经典hello world示例

class HelloWorld
  def call(env)
    return [200, {}, ["Hello world!"]]
  end
end
我的问题是为什么第三个值是[Hello world!”,而不是“Hello world”?从他们的文档中

class HelloWorld
  def call(env)
    return [200, {}, ["Hello world!"]]
  end
end
主体必须响应每个,并且只能产生字符串值 正文本身不应该是字符串的实例,因为这将打断 Ruby 1.9


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

我认为rack起源于python的wsgi。下面是对python的解释:

从句子
判断,主体本身不应该是String的实例,因为这将在Ruby 1.9中中断。
,我假设响应的最后一个元素必须是
可枚举的
。由于
String
在1.9中停止包含此模块,因此需要某种类型的集合来实现它


顺便说一句:hello world的例子通常不能很好地解释为什么某些事情是以某种方式完成的,它们太琐碎了。

我假设它可以被缓冲,然后分块发送给请求它的人。响应可能非常大,所以服务器的流”他说。您的问题是否更具体地针对Ruby 1.9而不是正文中的整个迭代?当您考虑send()和recv()在C世界中的工作方式时,这也是有意义的。当你调用recv时,你给它一个地址到它所填充的字符缓冲区。你不一定能在一次呼叫中得到整个身体。发送一系列字符时也是如此。对。当您插入的组件不仅仅是发送一个预先构建的字符串数组时,Rack会为您提供一个很好的
可枚举的
合同,以成批报告您的进度,以响应
每个
。虽然hello world的例子看起来很傻,但它在一些更真实的东西上更有意义,比如模板引擎吐出我们生成的HTML,例如,不鼓励只链接答案,因为您链接到的站点可能会关闭或更改。请把要点写在这里。