[Ironruby-core] module_function

Peter Bacon Darwin bacondarwin at googlemail.com
Tue Apr 22 03:34:12 EDT 2008

I know that a IronRuby expects singleton methods to have a signature of the
	SomeReturnType MySingletonMethod(CodeContext context, RubyClass
klass, Other parameters, ...)
And if you don't create them like this, e.g. forget the context or klass
parameters you do get this problem.
And instance methods, canonically to have the form
	SomeReturnType MyInstanceMethod(CodeContext context, object self,
Other parameters, ...)
Although instance methods seem to be more resilient to alternatives, such as
not including the context parameter.

I suspect that you will need to create a wrapper method around the method
that you are converting in module_function so that it has the correct

-----Original Message-----
From: ironruby-core-bounces at rubyforge.org
[mailto:ironruby-core-bounces at rubyforge.org] On Behalf Of Wayne Kelly
Sent: Monday,21 April 21, 2008 23:58
To: ironruby-core at rubyforge.org
Subject: [Ironruby-core] module_function

Is anyone currently working on or have any ideas regarding the
implementation of Module::module_function?
(this is where I'm currently stuck in trying to execute setup.rb for gems)

module_function is meant to take a list of names of instance methods and
make then also callable as class (or singleton) methods.

It's easy enough to locate the existing methods using something like:

RubyMethodInfo method = (RubyMethodInfo)module.ResolveMethod(method_name);

(BTW, why doesn't ResolveMethod return a RubyMethodInfo?)

However, I'm not entirely sure how to programmatically create a new class
(in Ruby.NET we had a helper method that would create a singleton for a
module if one didn't already exist, but I'm not sure what the equivalent of
this is in IronRuby)

Anyway, it seems that invoking:

module.SingletonClass.DefineMethod( ...)

creates a new method in the right place (provided SingletonClass has been
properly initialized).

However, when I try calling such a method as a class method I get a wrong
number of arguments exception, presumably because different parameters are
expected depending on whether it is called as an instance method or as a
class method.

Any ideas?

Cheers, Wayne.
Ironruby-core mailing list
Ironruby-core at rubyforge.org

More information about the Ironruby-core mailing list