Wow, that was quick! Thanks Tomas.
If by Ruby native you mean mostly implemented in Ruby, then no. I mentioned the Ruby snippets just for clarification. If I understand correctly, SetClassVariable has the same semantics as declaring what Ruby would call a class variable, as in @@some_var. @@some_var would be visible to the whole class hierarchy, so `FancyGraphics < Graphics; end` would share the same @@some_var instance - which is _not_ what I'd like. Just curious how that might work using the IR APIs. I assume the second question made sense. If not, let me know. Cheers, Charles -----Original Message----- From: ironruby-core-boun...@rubyforge.org [mailto:ironruby-core-boun...@rubyforge.org] On Behalf Of Tomas Matousek Sent: Tuesday, July 06, 2010 1:17 AM To: ironruby-core@rubyforge.org Subject: Re: [Ironruby-core] Setting and initializing instance variables on RubyClasses What is your overall goal? Are you implementing a Ruby native library? Tomas -----Original Message----- From: ironruby-core-boun...@rubyforge.org [mailto:ironruby-core-boun...@rubyforge.org] On Behalf Of Charles Strahan Sent: Monday, July 05, 2010 10:59 PM To: ironruby-core@rubyforge.org Subject: [Ironruby-core] Setting and initializing instance variables on RubyClasses Hello, How can I go about setting an instance variable on a RubyClass? Here's some code for context: [RubyClass("Graphics")] 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 end ... 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). Thanks, -Charles _______________________________________________ Ironruby-core mailing list Ironruby-core@rubyforge.org http://rubyforge.org/mailman/listinfo/ironruby-core _______________________________________________ Ironruby-core mailing list Ironruby-core@rubyforge.org http://rubyforge.org/mailman/listinfo/ironruby-core _______________________________________________ Ironruby-core mailing list Ironruby-core@rubyforge.org http://rubyforge.org/mailman/listinfo/ironruby-core