【问题标题】:in ruby, when is a block not a block? [duplicate]在红宝石中,什么时候块不是块? [复制]
【发布时间】:2016-01-20 10:43:18
【问题描述】:

开个玩笑,我有一个奇怪的情况,我有一些代码:

def remotes(form,remotes)
  personalised_form = form.dup
  remotes.each do |ident,remote|
    object = yield(ident)
    result = remote.call(object)
    insert_into_(personalised_form,ident,result)
  end
  personalised_form
end

我正在看看它是否像这样工作:

pp remotes(forms,remotes) do |ident|
  case(ident)
    when :get_assets
      '@Userobject'
  end
end

问题在于 ruby​​ 似乎认为我没有将块传递给 remotes 函数。

为什么 ruby​​ 坚持说我没有通过一个街区? (它特别给出了no block given (yield) (LocalJumpError))。

认为它不相关,remote 是一个包含键和 Procs 的散列,而 form 只是一个特定结构的散列,它使用 ident 将 proc 的结果插入其中以定位正确的插入点

【问题讨论】:

  • 我建议在 SO Ruby 聊天室问这个问题。 IMO 有点模糊。
  • 它计算你将块传递给 :pp,但不传递给 :remotes

标签: ruby block proc


【解决方案1】:

Ruby 认为您将块传递给 pp 方法,它只是忽略它。试试:

res = remotes(forms,remotes) do |ident|
  case(ident)
    when :get_assets
      '@Userobject'
  end
end

pp res

【讨论】:

  • 嗯,我明白了,这确实解决了问题,我想我应该在远程函数调用周围加上括号;我想这是一个优先问题,比我想的更累:P,谢谢。
猜你喜欢
  • 2012-03-31
  • 2011-04-26
  • 2016-11-16
  • 2017-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多