Я играю с взаимодействием между C # и IronRuby. Я заметил, что если я определяю свойство в Ruby, используя attr_accessor
, оно представляется C # как свойство. С другой стороны, если я создаю точно такой же код вручную, он возвращается как метод.
Например, возьмите этот код:
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;
Когда вы смотрите на переменную C # automatic
, значение представляет собой строку «testing». Если вы посмотрите на переменную C # manual
, это тип IronRuby.Builtins.RubyMethod.
В конечном счете, я хочу создать свои собственные свойства в Ruby, которые можно использовать в C #, но я не могу сделать так, чтобы они были видимыми, как свойства attr_accessor
.
Я ДУМАЮ, что в коде модуля исходного кода Ruby происходит какое-то волшебство (ModuleOps.cs: DefineAccessor). Есть ли способ сделать это непосредственно в коде Ruby?