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