[ next ] [ prev ] [ contents ] [ up to The Top Ten Reasons I Like Ruby ] | Invitation To Ruby |
Blocks and closures are an extremely useful concept. Uses for blocks and closures keep popping up all over the place.
Some possibilities are ...
Iterating
5.times { |i| puts "#{i}: Hello!" }
Callbacks (see example)
light = LightBulb.new gui_button.when_pressed { light.turn_on }
Delayed Execution
upon_program_exit { db.disconnect }
Resource Management (see example)
sql = "SELECT first_name FROM people WHERE last_name = 'Weirich'" db.select_all(sql) { |row| puts "#{row[0]} is a Weirich" }
Transaction Control (see example)
db.transaction { db.do("UPDATE people SET ...") db.do("UPDATE addresses SET ...") }
Critical Region Management (see example)
lock(semaphore) { queue.add(data_element) # Critical Region }
Thread Creation (see example)
t = Thread.new { 10.times { |i| puts "HI (#{i})" sleep 0.2 } }
Lazy Evaluation (see example)
def lazy_list_of_squares(n) [n*n, proc { lazy_list_of_squares(n+1) }] end
Unusual Control Structures (see example)
when_logging { puts "Entering new code" }
Really Unusual Control Structures
choose (proc { try_first_path }, proc { try_second_path })
Creating Continuations (see example)
callcc { |continuation| continuation.call puts "Never called" } puts "Continuing"
Coroutines (see example)
co = Coroutine.new { 5.times { do_some_work co.switch_to(other) } } co.start
[ next ] [ prev ] [ contents ] [ up to The Top Ten Reasons I Like Ruby ] | Copyright 2002 by Jim Weirich. All rights reserved. |