【问题标题】:Proc throws error when used with do end [duplicate]与 do end 一起使用时 Proc 抛出错误 [重复]
【发布时间】:2014-08-09 09:50:15
【问题描述】:

这不起作用:

run Proc.new do |env|
  [200, 
   {
    "Content-Type" => "application/json; charset=UTF-8"
  }, ["{\"name\":\"Rack App\"}"]]
end

但这确实:

run Proc.new { |env|
  [200, 
   {
    "Content-Type" => "application/json; charset=UTF-8"
  }, ["{\"name\":\"Rack App\"}"]]
}

任何想法,为什么与 do..end 一起使用时会抛出错误?

我得到的错误:

app.ru:1:in new: tried to create Proc object without a block (ArgumentError)

【问题讨论】:

  • do end vs { } 具有不同的优先级,因此它可能会像run do; # code end; Proc.new 这样运行,但{} 可能会按照您的意图运行:proc11 = Proc.new {; # code }; run proc11。好吧,我认为这是问题所在,但我不太了解机架,这就是为什么它是评论而不是答案。

标签: ruby rack proc


【解决方案1】:

您的第一个代码被解释为:

run(Proc.new) do |env|
  ...
end

并且块被传递给run而不是new。问题可以通过以下方式解决:

run(Proc.new do |env|
  ...
end)

【讨论】:

  • 应该是优先规则的结果?我想。无论如何,感谢您标记您的回答正确。
  • 是的,这是它的结果。
猜你喜欢
  • 2020-07-19
  • 1970-01-01
  • 2017-04-10
  • 2021-09-22
  • 2011-12-12
  • 2020-10-09
  • 1970-01-01
  • 1970-01-01
  • 2020-04-25
相关资源
最近更新 更多