Por que attr_accessor criar uma propriedade, mas o método é apenas um método?

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

  •  17-09-2020
  •  | 
  •  

Pergunta

Estou a brincar com a interoperabilidade entre C# e o IronRuby.Tenho notado que, se eu definir uma propriedade em Ruby usando attr_accessor, ele é apresentado para o C# como uma propriedade.Se, por outro lado, eu criar exatamente o mesmo código manualmente, ele volta como um método.

Por exemplo, pegue este código:

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;

Quando você olhar para o C# automatic variável, o valor é uma seqüência de "testes".Se você olhar a C# manual variável, ele é tipo o IronRuby.Builtins.RubyMethod.

Enfim, eu quero criar a minha própria propriedades em Ruby que pode ser usado em C#, mas eu não consigo fazê-los ser visível como propriedades como attr_accessor não.

Eu ACHO que há um pouco de magia acontecendo no Módulo de código do Ruby código-fonte (ModuleOps.cs:DefineAccessor).Existe alguma maneira de fazer isso em Ruby código diretamente?

Foi útil?

Solução

Este particular problema foi discutido no IronRuby-Núcleo de thread:http://rubyforge.org/pipermail/ironruby-core/2010-July/007154.html

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top