##ブロック引数
###yield
自分で定義したブロック付きメソッドでブロックを呼び出すときに使う。 yield に渡された値は|
と|
の間にはさまれた変数(ブロックパラメータ)に代入される。
# ブロック付きメソッドの定義の働きは与えられたブロック(手続き)に引数1, 2を渡して実行すること
def foo
yield(1, 2)
end
# 「2引数手続き、その働きは足し算をして印字する」というものを渡して実行させる
foo { |a, b| a + b }
#=> 3
-
yield
の部分にメソッドhoge1
hoge2
のそれぞれのブロックの中身をそのまま置き換えたイメージ。
# users_info = {
# "kato" => {
# :id=>1,
# :age=>30,
# :birthday=>'1990-01-01'},
# "yamada" => {},
# "suzuki" => {}
# }
def foo
users_info.values.filter do |values|
values.present? && yield(values)
end
end
def hoge1
foo do |v|
(v[:id].present? && v[:age].present?) || v[:birthday].present?
end
end
def hoge2
foo do |v|
v[:id].present? && v[:birthday].present?
end
end
##Proc引数(プロック引数)
###&block
&blockという引数を宣言すると、ブロックがblock変数に代入される。
block.callメソッドを呼ぶとブロックの処理が実行される。
def hoge(&block)
block.call(1, 2)
end
hoge { |a, b| a + b }
#=> 3