在红宝石中,什么时候是一块不是一块?

The*_*tix 1 ruby block proc

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

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
Run Code Online (Sandbox Code Playgroud)

而且我看到它是否如此工作:

pp remotes(forms,remotes) do |ident|
  case(ident)
    when :get_assets
      '@Userobject'
  end
end
Run Code Online (Sandbox Code Playgroud)

问题是,ruby似乎认为我没有将一个块传递给该remotes函数.

为什么红宝石坚持认为我没有通过一个街区?(它no block given (yield) (LocalJumpError)具体给出了).

认为它不相关,遥控器是包含键和Proc的散列,而形式只是一个特定结构的散列,其中使用ident插入proc的结果来定位正确的插入点

Bor*_*nho 5

Ruby认为你将块传递给pp方法,它只是忽略它.尝试:

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

pp res
Run Code Online (Sandbox Code Playgroud)