#!/usr/local/bin/ruby # -*- mode: ruby -*- # $Id: except.ruby,v 1.3 2000/10/07 08:41:43 doug Exp $ # http://www.bagley.org/~doug/shootout/ $HI = 0 $LO = 0 NUM = Integer(ARGV[0] || 1) class Lo_Exception < Exception def initialize(num) @value = num return self end end class Hi_Exception < Exception def initialize(num) @value = num return self end end def some_function(num) begin hi_function(num) rescue print "We shouldn't get here, exception is: #{$!.type}\n" end end def hi_function(num) begin lo_function(num) rescue Hi_Exception $HI = $HI + 1 end end def lo_function(num) begin blowup(num) rescue Lo_Exception $LO = $LO + 1 end end def blowup(num) if num % 2 == 0 raise Lo_Exception.new(num) else raise Hi_Exception.new(num) end end for iter in 1 .. NUM some_function(iter) end print "Exceptions: HI=", $HI, " / LO=", $LO, "\n"