This page contains automated test results for code from O'Reilly's Ruby Cookbook. If this code looks interesting or useful, you might want to buy the whole book.

Writing a Method that Accepts a Block
CodeExpectedActual
def call_twice
  puts "I'm about to call your block."
  yield
  puts "I'm about to call your block again."
  yield
end
call_twice { puts "Hi, I'm a talking code block." }
I'm about to call your block.
Hi, I'm a talking code block.
I'm about to call your block again.
Hi, I'm a talking code block.
I'm about to call your block.
Hi, I'm a talking code block.
I'm about to call your block again.
Hi, I'm a talking code block.
def repeat(n)
 if block_given?
    n.times { yield }
  else
    raise ArgumentError.new("I can't repeat a block you don't give me!")
  end
end
repeat(4) { puts "Hello." }
Hello.
Hello.
Hello.
Hello.
Hello.
Hello.
Hello.
Hello.
repeat(4)
ArgumentError: I can't repeat a block you don't give me!
...
ArgumentError: I can't repeat a block you don't give me!
	from (irb):12:in `repeat'
	from (irb):16
puts("Print this message.") { puts "And also run this code block!" }
Print this message.
Print this message.
def call_twice
  puts "Calling your block."
  ret1 = yield("very first")
  puts "The value of your block: #{ret1}"
  puts "Calling your block again."
  ret2 = yield("second")
  puts "The value of your block: #{ret2}"
end
call_twice do |which_time|
  puts "I'm a code block, called for the #{which_time} time."
  which_time == "very first" ? 1 : 2
end
Calling your block.
I'm a code block, called for the very first time.
The value of your block: 1
Calling your block again.
I'm a code block, called for the second time.
The value of your block: 2
Calling your block.
I'm a code block, called for the very first time.
The value of your block: 1
Calling your block again.
I'm a code block, called for the second time.
The value of your block: 2
squares = {0=>0, 1=>1, 2=>4, 3=>9}
squares.find { |key, value| key > 1 }
[2, 4] [2, 4]
class Hash
  def find_all
    new_hash = Hash.new
    each { |k,v| new_hash[k] = v if yield(k, v) }
    new_hash
  end
end
squares.find_all { |key, value| key > 1 }
{2=>4, 3=>9} {2=>4, 3=>9}
squares.dup.delete_if { |key, value| key > 1 }
{0=>0, 1=>1} {0=>0, 1=>1}
squares.dup.delete_if { |key, value| key <= 1 }
{2=>4, 3=>9} {2=>4, 3=>9}
[1, 2, 3].each
LocalJumpError: no block given
...
LocalJumpError: no block given
	from (irb):42:in `each'
	from (irb):42