Created
September 22, 2010 18:29
-
-
Save kivanio/592221 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class ClosureReturnDemo | |
def return_from_proc | |
Proc.new do | |
return true if true | |
end.call | |
puts " OUT:" | |
end | |
def break_from_proc | |
Proc.new do | |
break true if true | |
end.call | |
puts " OUT:" | |
end | |
def return_from_lambda | |
lambda do | |
return true if true | |
end.call | |
puts " OUT:" | |
end | |
def break_from_lambda | |
puts " OUT:" | |
end | |
def spotcar | |
yield | |
puts "SC OUT:" | |
ensure | |
puts "SC2OUT:" | |
end | |
def return_from_block | |
spotcar do | |
return true if true | |
end | |
puts " OUT:" | |
end | |
def break_from_block | |
spotcar do | |
break true if true | |
end | |
puts " OUT:" | |
end | |
def return_from_lambda_as_block | |
x = lambda do | |
return true if true | |
end | |
spotcar(&x) | |
puts " OUT:" | |
end | |
def break_from_lambda_as_block | |
x = lambda do | |
break true if true | |
end | |
spotcar(&x) | |
puts " OUT:" | |
end | |
def return_from_proc_as_block | |
x = Proc.new do | |
return true if true | |
end | |
spotcar(&x) | |
puts " OUT:" | |
end | |
def break_from_proc_as_block | |
x = Proc.new do | |
break true if true | |
end | |
spotcar(&x) | |
puts " OUT:" | |
end | |
def execute | |
%w(return_from_proc break_from_proc | |
return_from_lambda break_from_lambda | |
return_from_block break_from_block | |
return_from_lambda_as_block break_from_lambda_as_block | |
return_from_proc_as_block break_from_proc_as_block).each do |x| | |
begin | |
send x | |
puts " END: %s\n\n" % [x] | |
rescue | |
puts " PROB: %s\n\n" % [$!.message] | |
end | |
end | |
end | |
end | |
ClosureReturnDemo.new.execute | |
__END__ | |
END: return_from_proc | |
PROB: break from proc-closure | |
OUT: | |
END: return_from_lambda | |
OUT: | |
END: break_from_lambda | |
SC2OUT: | |
END: return_from_block | |
SC2OUT: | |
OUT: | |
END: break_from_block | |
SC2OUT: | |
END: return_from_lambda_as_block | |
SC2OUT: | |
PROB: break from proc-closure | |
SC2OUT: | |
END: return_from_proc_as_block | |
SC2OUT: | |
PROB: break from proc-closure |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment