簡體   English   中英

Ruby Object中是否有一種方法可以將自身傳遞給塊或proc?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM