[英]Is there a method in Ruby Object to pass itself to a block or proc?
我認為在Ruby中添加類似的東西是很自然的:
class Object
def yield_self
yield(self)
end
end
是否存在這樣的方法? (我還沒有找到。)還有其他人認為擁有它會很好嗎?
yield_self
已被添加到核心紅寶石一個月前的6月2017年的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
的返回值是接收方(即,在我的示例中為匿名數組),而方法的返回值是塊的返回值。
您可以在tap
方法的源代碼中看到以下內容:
VALUE
rb_obj_tap(VALUE obj)
{
rb_yield(obj);
return obj;
}
我們將返回傳遞給函數的obj
而不是rb_yield(obj)
的返回值。 如果這種區別至關重要,那么您就不需要tap
了。 否則,這似乎很合適。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.