I am playing around with the interop between C# and IronRuby. I have noticed that if I define a property in Ruby using attr_accessor
, it is presented to C# as a property. If, on the other hand, I create the exact same code manually, it comes back as a method.
For example, take this code:
var engine = IronRuby.Ruby.CreateEngine();
string script = @"
class Test
attr_accessor :automatic
def manual
@manual
end
def manual=(val)
@manual = val
end
def initialize
@automatic = ""testing""
@manual = ""testing""
end
end
Test.new
";
var testObject = engine.Execute(script);
var automatic = testObject.automatic;
var manual = testObject.manual;
When you look at the C# automatic
variable, the value is a string of "testing". If you look at the C# manual
variable, it is type IronRuby.Builtins.RubyMethod.
Ultimately, I want to create my own properties in Ruby that can be used in C#, but I can't seem to make them be visible as properties like attr_accessor
does.
I THINK, that there is some magic going on in the Module code of the Ruby source code (ModuleOps.cs:DefineAccessor). Is there any way to do this in Ruby code directly?