Block Scope
...or, how closures break encapsulation (in a good way)
Example of Block Scope
def twice
  yield
  yield
end
def flatter
  message = "you are great"
  twice do
    puts "#{message}!"
  end
end
message is in the scope of flatter, not twice
locals, function parameters, block parameters
def twice_with word
  yield word
  yield word.upcase
end
def flatter person
  message = "you are great"
  twice_with(person) do |name|
    puts "#{message}, #{name}!"
  end
end
flatter "Alex"
- 
person is a parameter of flatter
 
- 
message is a local variable of flatter
 
- 
name is a parameter of the block
 
- 
word is a parameter of twice_with
 
Q: Which variables are available inside the block?