我明白在没有参数`&block`的方法中,在带有参数`&block`和yield self`的方法中使用`yield self`有没有什么区别?
def a(&block)
block.call(self)
end
和
def a()
yield self
end
导致相同的结果,如果我假定有这样的块a {}
。我的问题是 - 因为我偶然发现了这样的一些代码,无论任何差别或是否存在具有(如果我不以其他方式使用变量/参考块)的任何优势:
def a(&block)
yield self
end
这是一个具体情况我不了解使用&block
:
def rule(code, name, &block)
@rules = [] if @rules.nil?
@rules << Rule.new(code, name)
yield self
end
为[块参数](http://ruby-doc.org/core-2.4.1/doc/syntax/methods_rdoc.html#label-Block+Argument)文档显示不同的使用情况。 – Stefan
@Stefan我添加了一个特定的案例,我不明白使用&block,也许我错过了一些东西,所以你可能会看看?除此之外,我还阅读了文档,它对应于我的理解。 –
如果您不打算明确使用它,请不要将其添加到列表中。它使得调用速度变慢并且令人困惑。 – ndn