Ruby Object中是否有一个方法将自身传递给块或proc?

我认为在Ruby中使用类似的东西是很自然的:

class Object def yield_self yield(self) end end 

这样的方法有没有机会? (我还没有找到。)有没有人认为拥有它会很好?

yield_self 2017年6月起, yield_self已于一个月前添加到ruby核心yield_self

它是在版本号58528之后的ruby 2.5.0中,虽然我还不确定如何获得该代码。 也许如果有人知道他们如何编辑这个答案

我不明白为什么你想要复杂性:

 Object.new.yield_self do |foo| ... end 

当以下几乎完全相同时:

 foo = Object.new ... 

事实上, tap方法几乎完全符合您的要求:

 x = [].tap do |array| array << 'foo' array << 9 end px #=> ["foo", 9] 

正如Rob Davis指出的那样, tap和你的方法之间存在微妙但重要的区别。 tap的返回值是接收器(即我的示例中的匿名数组),而方法的返回值是块的返回值。

你可以在tap方法的源代码中看到这个:

 VALUE rb_obj_tap(VALUE obj) { rb_yield(obj); return obj; } 

我们返回传递给函数的obj而不是rb_yield(obj)的返回值。 如果这种区别至关重要,那么tap就不是你需要的。 否则,它看起来很合适。