On 2007-06-16 03:07:57 -0500, "Erwin Abbott" <erwin.abbott / gmail.com> said: > On 6/16/07, Banzai <noemail / yahoo.com> wrote: >> ... >> d = Door.new("/path/to/door", "func") >> Is it more convenient to say: >> d = Door.new(:path => "/path/to/door", :proc => "func") > > From my experience the most Ruby-like way of doing this would be > d = Door.new("/path/to/door") { |arg| arg ** 2 } > > You can implement it like this > > class Door > def initialize(path, &block) > # var named block is now a Proc object > @block = block > end > end > > Regards, > - Erwin Thank you for your input, Erwin. Remember that my extension is written in C, so the implementation would be a bit more involved. :-) I do like the idea... But, I think Door should be a subclass of File, and File doesn't like a code block for an argument, and I'll get this warning: warning: Door::new() does not take block; use Door::open() instead This warning comes from rb_io_s_new() in io.c, so I don't think I can suppress it if I say: rb_define_class("Door", rb_cFile); -- H. Asari