Почему attr_accessor создает свойство, но method - это просто метод?
Вопрос
Я играю с взаимодействием между 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.Встроенные функции.RubyMethod.
В конечном счете, я хочу создать свои собственные свойства в Ruby, которые можно использовать в C#, но, похоже, я не могу сделать их видимыми как такие свойства, как attr_accessor
делает.
Я ДУМАЮ, что в коде модуля исходного кода Ruby (ModuleOps.cs:DefineAccessor) происходит какая-то магия.Есть ли какой-нибудь способ сделать это непосредственно в коде Ruby?
Решение
Эта конкретная проблема обсуждалась далее в теме IronRuby-Core:http://rubyforge.org/pipermail/ironruby-core/2010-July/007154.html