Ruby では次のようなものを用意するのが自然だと思います。
class Object
def yield_self
yield(self)
end
end
ひょっとして、このような方法が存在するのでしょうか?(私は見つけていません。)他の誰かがそれを持っているといいと思いますか?
実際、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
は必要なものではありません。そうでなければ、それはぴったりのようです。
次の複雑さが必要な理由がわかりません。
Object.new.yield_self do |foo|
...
end
以下がほぼ正確に等しい場合:
foo = Object.new
...