新手问题 block 传参问题,求大手子指点。

Lonely_waiting · 2019年02月14日 · 最后由 ecnelises 回复于 2019年02月15日 · 1034 次阅读

看不明白块传参的方法,请大手子讲解一下以下代码的传参过程和具体传给谁,传什么。

代码如下,代码不完整,从项目中摘除下来的。只是表达这两个方法调用的方式。 激不尽!!

假设我们是这样调用一个方法的:

some_method do |arg|
  puts arg
end

那么我们可以用两种方法编写 some_method

def some_method(&block)
  block.call(1) if block # 这里的 block 就是一个 proc 对象
end

或者

def some_method
  yield 1 if block_given? # yield 就是调用附加上去的这个 block 的意思,block_given? 是一个预设方法
end
ecnelises 回复

您说的这个我可以理解,能帮我稍微解释下我上边那个每行代码的调用顺序么?

Lonely_waiting 回复

到了 safe_run 里面,先执行 block.call,也就是那个 halt 和后面的代码,那个 block 里最后的 yield 会执行最下面 with_service_runing 带的那个 block。两层执行完之后,再继续执行 safe_run 里面剩下的代码

需要 登录 后方可回复, 如果你还没有账号请 注册新账号