Rubyブロック#2 - Silver/Gold試験対策
def hoge(a, b, &fuga) fuga.call(a*b) end hoge(2, 3) {|arg| puts "a,bを掛け算して#{arg}でした" } def bar(a, b) puts yield(a*b) end hoge(2, 3) {|arg| puts "a,bを掛け算して#{arg}でした" }
procオブジェクトの実行には & + callでも yieldでもどちらでも可能
以下のすべてがprocオブジェクト。なぜこれだけあるのか。
a = lambda {|n| n**n} b = proc {|n| n**n} c = Proc.new {|n| n**n} d = ->n{n**n} p a.call(2) p b.call(2) p c.call(2) p d.call(2)
&は、各クラスのto_procを実行するので 整数クラスのto_procを上書きしてみる
class Fixnum def to_proc ->n{ self * n } end end def proc_func(a, &b) b.call(a) end p proc_func(2,&3) #=> 6
&のショートカット記載方法。 以下の各々2つは同じ意味
require 'prime' p (1..100).select {|i| i.prime? } p (1..100).select(&:prime?) p %w(Alpha Bravo Charlie).map{|name| name.upcase } p %w(Alpha Bravo Charlie).map(&:upcase)
p (1..100).select(&:prime?)は、p (1..100).select(&(:prime?))と同じだと思うが &は何のメソッドだろう。。