簡體   English   中英

在Ruby中使用&:語法調用自定義方法

[英]Calling custom method with &: syntax om Ruby

所以基本上我在看這個簡單的例子:

%w[A B C].map(&:downcase)

並對&:語法產生了興趣。 閱讀一些文章后,我認為我明白了(或者至少是這樣),所以我決定為Integer實施類似的操作:

class Integer
  def my_multiplier
    puts "66"
  end
end

在這里,我可以利用&:語法,因為我可以這樣做:

3.times(&:my_multiplier)

但是結果當然是數字66三倍。

我的問題是如何重構我的方法,以便實際上可以使用3.times..的值?

首先,語法是&object ,不是&: &object&object調用.to_proc

現在,假設您希望乘數簡單地將整數乘以66,則將其寫為:

class Integer
  def my_multiplier
    puts 66 * self
  end
end

這將導致

2.5.1 :006 > 3.times(&:my_multiplier)
0
66
132

這相當於調用

3.times { |i| i.my_multiplier }

您還可以將my_multiplier定義為proc或lambda,

2.5.1 :001 > p = ->(i) { puts i * 66 }
 => #<Proc:0x00005582b3ae5638@(irb):1 (lambda)> 
2.5.1 :002 > 3.times(&p)
0
66
132

不清楚您使用該方法的目的是什么,但是當前整數將作為self 因此,您可以執行以下操作:

class Integer
  def double 
    self * 2
  end 

end

3.times.map(&:double) # => [0, 2, 4]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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