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
就不是你需要的。 否则,它看起来很合适。