我认为在 Ruby 中有类似的东西是很自然的:
class Object
def yield_self
yield(self)
end
end
是否存在这样的方法?(我还没有找到。)其他人认为拥有它会很好吗?
yield_self
截至 2017 年 6 月,已在一个月前添加到 ruby 核心。https://bugs.ruby-lang.org/projects/ruby-trunk/repository/revisions/58528
它在修订号 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
p x
#=> ["foo", 9]
正如 Rob Davis 所指出的,tap
你的方法和你的方法之间有一个微妙但重要的区别。的返回值tap
是接收者(即我的示例中的匿名数组),而您的方法的返回值是块的返回值。
VALUE
rb_obj_tap(VALUE obj)
{
rb_yield(obj);
return obj;
}
我们返回的obj
是传递给函数的,而不是返回值rb_yield(obj)
。如果这种区别很重要,那么tap
这不是您所需要的。否则,它似乎很合适。