Trans
10/14/2006 3:36:00 PM
John Ky wrote:
> >>>>>
> def define_my_method(method_name)
> define_method method_name do
> yield
> end
> end
Yea, funny thing about Ruby, closures go a long ways. Have a look at
what self is in one fo your definitions:
> class X
> define_my_method :method1 do
> puts "Method 1"
> end
> define_my_method :method2 do
> puts "Method 2"
p self
> method1
> end
> end
>
> X.new.method2
This is why define_method takes a block. So a fix would be:
def define_my_method(method_name, &block)
define_method method_name, &block
end
Unfortuantely that's not always the prefect solution since you might
want to wrap extra code around the yield . In that case, you can use
#instance_eval if you don't need to pass parameters. If you do need to
pass parameters you'll have to use more complicated tricks until 1.9
introduces #instance_exec.
On a related note, I still think it would be helpful if we could create
clean-closure blocks.
T.