Почему attr_accessor создает свойство, но method - это просто метод?

StackOverflow https://stackoverflow.com/questions/3277885

  •  17-09-2020
  •  | 
  •  

Вопрос

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top