Blocks receive parameters and can make local calculations for each yielded value.

block parameter Names between vertical bars receive values from the method that is running the block.

Block Parameters

multiplier
block_parameters.rb
Replay: real traced execution (multi-file project)
numbers = [2, 4, 6]
multiplier = 3

numbers.each do |number|
  product = number * multiplier
  puts "#{number}x#{multiplier}=#{product}"
end
numbers = [2, 4, 6]
multiplier = 2

numbers.each do |number|
  product = number * multiplier
  puts "#{number}x#{multiplier}=#{product}"
end
numbers = [2, 4, 6]
multiplier = 5

numbers.each do |number|
  product = number * multiplier
  puts "#{number}x#{multiplier}=#{product}"
end
  1. numbers ← [2, 4, 6], multiplier ← 3

    1numbers→ [2, 4, 6] = [2, 4, 6]2multiplier→ 3 = 3  #@multiplier=2, 534numbers[2, 4, 6].each do |number|5  product = number * multiplier6  puts "#{number}x#{multiplier}=#{product}"7end
  2. product ← 6

    pass 1 of 3
    4numbers.each do |number2|5  product→ 6 = number2 * multiplier36  puts "#{number2}x#{multiplier3}=#{product6}"7end
    output2x3=6
    All 3 passes — pass 1 is the card above
    passnumbernumbersproduct
    126
    2412
    36[2, 4, 6]18
  1. numbers ← [2, 4, 6], multiplier ← 2

    1numbers→ [2, 4, 6] = [2, 4, 6]2multiplier→ 2 = 234numbers[2, 4, 6].each do |number|5  product = number * multiplier6  puts "#{number}x#{multiplier}=#{product}"7end
  2. product ← 4

    pass 1 of 3
    4numbers.each do |number2|5  product→ 4 = number2 * multiplier26  puts "#{number2}x#{multiplier2}=#{product4}"7end
    output2x2=4
    All 3 passes — pass 1 is the card above
    passnumbernumbersproduct
    124
    248
    36[2, 4, 6]12
  1. numbers ← [2, 4, 6], multiplier ← 5

    1numbers→ [2, 4, 6] = [2, 4, 6]2multiplier→ 5 = 534numbers[2, 4, 6].each do |number|5  product = number * multiplier6  puts "#{number}x#{multiplier}=#{product}"7end
  2. product ← 10

    pass 1 of 3
    4numbers.each do |number2|5  product→ 10 = number2 * multiplier56  puts "#{number2}x#{multiplier5}=#{product10}"7end
    output2x5=10
    All 3 passes — pass 1 is the card above
    passnumbernumbersproduct
    1210
    2420
    36[2, 4, 6]30

Follow the Parameters

  1. numbers starts as 2, 4, and 6.
  2. multiplier starts as 3.
  3. Each block run receives one number.
  4. The block multiplies that number by 3 and prints the equation. | number | multiplier | product | output | | --- | --- | --- | --- | | 2 | 3 | 6 | 2x3=6 | | 4 | 3 | 12 | 4x3=12 | | 6 | 3 | 18 | 6x3=18 |

Exercise: block_parameters.rb

Reproduce the three default equations, then use the pinned multiplier variants to predict the products for 2 and 5.