ruby产量和回报同时存在于一种方法中

ruby产量和回报同时存在于一种方法中,ruby,Ruby,在tap方法中,产生self和self的要点是什么。 我认为只有屈服于自我就足够了。 以下代码来自Github faraday.rb class Object def tap yield self self end unless Object.respond_to?(:tap) end yield self将self传递到调用的块tap,而末尾的self是tap返回的。这正是点击的要点,在块中使用对象,并且仍然能够将其传递给链中的下一个方法。但是请注意,如果block方

在tap方法中,
产生self
self
的要点是什么。 我认为只有
屈服于自我
就足够了。
以下代码来自Github faraday.rb

class Object
  def tap
    yield self
    self
  end unless Object.respond_to?(:tap)
end

yield self
self
传递到调用的块
tap
,而末尾的
self
tap
返回的。这正是
点击
的要点,在块中使用对象,并且仍然能够将其传递给链中的下一个方法。但是请注意,如果block方法是破坏性的,则将传递修改后的版本。就我个人而言,我尽量避免这样做,因为我主要使用
tap
进行调试

实际上,您可以自由修改块中的对象(假设它具有可变状态),并且它的修改形式将传递给链中的下一个方法。公平地说,我将重写它。@Russell:我重写了我的答案,以便您可以删除否决票(如果仍然不满意,则建议进一步编辑).我仍然不确定它是否清晰-我不知道你为什么说它会传递给未修改的对象,因为它不会。例如,您可以使用它来构建带有条件的哈希。我想在这里举个例子,但不能在注释中发布清晰的多行代码,也不想发布答案。完成。另外,
tap
有很多可爱的用法。调试很好!我明白了,但屈服于自我的同时也回报了自我。是否正确?如果
yield self
tap
中的最后一个语句,表达式
something.tap{x |…}
将返回块的值,使用
return self
将返回
self
的值,如果块是非构造性的,则可能会有所不同。