Rubyブロックの定義方法
1349 ワード
Rubyブロックの定義方法
Rubyの
ここではyieldを用い,yieldはブロック付きメソッドを定義する際に重要なキーワードであり,yieldはメソッドを呼び出す際にブロックを介して渡される処理がyield定義の場所で実行されることを理解できる.上記の例ではyield部分にはパラメータがなく、パラメータがあればブロック変数としてブロックにパラメータが渡されます.次の例ではyieldに1つのパラメータを渡すと,1つのブロック変数が受け入れられる.0,1,3個のパラメータをyieldに渡すことで,対応するブロックをどのように処理するか.
出力結果:
ブロックパラメータを渡してブロック値を取得する例をもう1つ挙げます
Rubyの
do ~end
の間の部分をブロックと呼び、{..}
と書くこともできます.次に、簡単な例を見て、どのようにブロックをカスタマイズする方法を見ます.def myloop
while true
yield
end
end
num = 1
myloop do
puts "num is #{num}"
break if num > 100
num *= 2
end
ここではyieldを用い,yieldはブロック付きメソッドを定義する際に重要なキーワードであり,yieldはメソッドを呼び出す際にブロックを介して渡される処理がyield定義の場所で実行されることを理解できる.上記の例ではyield部分にはパラメータがなく、パラメータがあればブロック変数としてブロックにパラメータが渡されます.次の例ではyieldに1つのパラメータを渡すと,1つのブロック変数が受け入れられる.0,1,3個のパラメータをyieldに渡すことで,対応するブロックをどのように処理するか.
def block_args_test
yield() #0
yield(1) #1
yield(1, 2, 3) #3
end
puts " |a| "
block_args_test do |a|
p |a|
end
puts
puts " |a, b, c| "
block_args_test do |a, b, c|
p |a, b, c|
end
puts
puts " |*a| "
block_args_test do |*a|
p |*a|
end
出力結果:
|a|
[nil]
[1]
[1]
|a, b, c|
[nil, nil, nil]
[1, nil, nil]
[1, ,2, 3]
|*a|
[[]]
[[1]]
[[1, 2, 3]]
ブロックパラメータを渡してブロック値を取得する例をもう1つ挙げます
def total(from, to)
result = 0
from.upto(to) do |num|
if block_given?
result += yield(num)
else
resunt += num
end
end
return result
end
p total(1, 10)
p total(1, 10) {|num| num ** 2}