Sam Kong wrote: > Hi! > > A friend of mine challenged me with Smalltalk. > He's a big fan of Smalltalk. > He asked me what I can do if I want to add "try ~ finally ~" systax in > Ruby. > Yes, we already have "begin ~ ensure ~". > But he asked me whether Ruby is flexible enough to extend such a thing > without changing the language itself. > He said that Smalltalk doesn't have "try ~ finally ~" in the language > but can be defined without changing the language. > > Personally, I don't think such flexibility is really needed. > However, I want to defend Ruby. > How would you react such an attack? There are several ways this could be done ... here is one: class TryFinally def initialize(block) @block = block end def finally @block.call ensure yield end end def try(&block) TryFinally.new(block) end Usage: try { puts "Trying" fail "oops" }.finally { puts "Always printed" } It is a bit little easier in Smalltalk because of the use of keywords in an argument list, but still quite doable in Ruby. -- -- Jim Weirich -- Posted via http://www.ruby-forum.com/.