On 9/19/07, August Lilleaas <augustlilleaas / gmail.com> wrote: > I got this idea of a sort of neat syntatic sugar of bang (foo!) and > question (foo?) methods. Take a look at this pastie: > http://pastie.caboo.se/98638 > > The idea is that you'll have two keywords added to Ruby - bang_given? > and question_given?. Similar to block_given?. > > In this pastie, the method "finish" will not call save, as bang_given? > isn't true. If you call "finish!", though, b ang_given will return true, > and save will be called. > > Same thing with question_given?. Question given would be the least > useful of them, though. > > And yes, doing def finish!; finish; save; is pretty easy, and this is > not the sort of thing that should have max priority. It would still be a > nice addition to the code-design useability of Ruby, though, as having > 10 "def finish!; finish; save;"-ish methods is pretty boring. It doesn't seem to carry it's own weight so as to merit the fundamental change to ruby semantics it implies. Ruby would need to magically turn a finish! call into a finish call and arrange to return true for bang_given? If it really bothers you to write those finish! methods for YOUR classes, why not do a little work with method_missing or a class method to generate the pair which could be done without affecting the language or the base classes? For example: shadowfax:~/Documents rick$ cat magic_bang.rb module MagicBang def method_missing(msg, *args, &blk) msg.to_s.sub(/(.+)!$/) do __send__($1, *args, &blk) return save end super end end class TestClass include MagicBang def finish puts "Finish called" end def save puts "save called" end end puts "Calling finish method" TestClass.new.finish puts puts "Calling finish! method" TestClass.new.finish! shadowfax:~/Documents rick$ ruby magic_bang.rb Calling finish method Finish called -- Rick DeNatale My blog on Ruby http://talklikeaduck.denhaven2.com/