Method Arguments
Block Argument
An explicit &block parameter stores the caller's block so the method can call it later.
block argument
`&block` turns the passed block into an object that responds to `call`.
Block Argument
block_argument.rb
Replay: real traced execution (multi-file project)
def apply(value, &block)
block.call(value)
end
factor = 2
base = 4
result = apply(base) do |number|
number * factor
end
puts "base=#{base}"
puts "factor=#{factor}"
puts "result=#{result}"
def apply(value, &block)
block.call(value)
end
factor = 3
base = 4
result = apply(base) do |number|
number * factor
end
puts "base=#{base}"
puts "factor=#{factor}"
puts "result=#{result}"
def apply(value, &block)
block.call(value)
end
factor = 5
base = 4
result = apply(base) do |number|
number * factor
end
puts "base=#{base}"
puts "factor=#{factor}"
puts "result=#{result}"
factor ← 2, base ← 4
5factor→ 2 = 2 #@factor=3, 56base→ 4 = 478result = apply(base4) do |number|9 number * factor10enddef apply(value, &block)
1def apply(value4, &block⟨Proc A /tmp/execution/⟨tmp B⟩.rb:52⟩)2 block.call(value)83endresult ← 8
8result→ 8 = apply(base4) do |number4|9 number * factor10endputs "base=#{base}"
12puts "base=#{base4}"13puts "factor=#{factor2}"14puts "result=#{result8}"outputbase=4 factor=2 result=8
factor ← 3, base ← 4
5factor→ 3 = 36base→ 4 = 478result = apply(base4) do |number|9 number * factor10enddef apply(value, &block)
1def apply(value4, &block⟨Proc A /tmp/execution/⟨tmp B⟩.rb:52⟩)2 block.call(value)123endresult ← 12
8result→ 12 = apply(base4) do |number4|9 number * factor10endputs "base=#{base}"
12puts "base=#{base4}"13puts "factor=#{factor3}"14puts "result=#{result12}"outputbase=4 factor=3 result=12
factor ← 5, base ← 4
5factor→ 5 = 56base→ 4 = 478result = apply(base4) do |number|9 number * factor10enddef apply(value, &block)
1def apply(value4, &block⟨Proc A /tmp/execution/⟨tmp B⟩.rb:52⟩)2 block.call(value)203endresult ← 20
8result→ 20 = apply(base4) do |number4|9 number * factor10endputs "base=#{base}"
12puts "base=#{base4}"13puts "factor=#{factor5}"14puts "result=#{result20}"outputbase=4 factor=5 result=20