ruby产量和回报同时存在于一种方法中
在tap方法中,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方
产生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
的值,如果块是非构造性的,则可能会有所不同。