[Ironruby-core] Setting and initializing instance variables on RubyClasses

Charles Strahan charles.c.strahan at gmail.com
Tue Jul 6 01:59:26 EDT 2010


How can I go about setting an instance variable on a RubyClass?

Here's some code for context:

    public class Graphics
        [RubyMethod("frame_rate", RubyMethodAttributes.PublicSingleton)]
        public static int GetFrameRate(RubyClass self)
            // What goes here?
            // I could use self.TryGetClassVariable, but that's a *class*
variable, correct?
            // I want to achieve the same thing as "return @frame_rate",
            // not "return @@frame_rate"

        [RubyMethod("frame_rate=", RubyMethodAttributes.PublicSingleton)]
        public static void SetFrameRate(RubyClass self, int frameRate)
            // Same thing here. I could do this:
            // self.SetClassVariable("frame_rate", frameRate);
            // but I want to achieve the same as this:
            // @frame_rate = frame_rate

Another option *just* dawned on me; how about these two:
self.Context.SetInstanceVariable(self, "frame_rate", frameRate);
self.Context.TryGetInstanceVariable(self, "frame_rate", out frameRate);

Is that what I'm looking for?

One more question:  is there a way to get the library initializer to invoke
a callback so that I may perform some initialization for the RubyClass
itself?  In the case above, I'd like to initialize the frame_rate when the
RubyClass is created.  As an example:

class Graphics
  attr_accessor :frame_rate
  frame_rate = 40
Graphics.frame_rate = something_else

I'd like that "frame_rate = 40" to happen when the assembly is loaded by the
IronRuby runtime, if possible.  I'm sure I could type that into my
auto-generated LibraryInitializer, but I'd rather do this declaratively,
perhaps using Attributes (like RubyMethod and RubyClass, etc).


More information about the Ironruby-core mailing list