Почему attr_accessor создает свойство, а метод - это просто метод? - PullRequest
2 голосов
/ 19 июля 2010

Я играю с взаимодействием между 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?

1 Ответ

0 голосов
/ 23 июля 2010

Эта конкретная проблема обсуждалась далее в потоке IronRuby-Core: http://rubyforge.org/pipermail/ironruby-core/2010-July/007154.html

...