¿Por qué attr_accessor crear una propiedad, pero el método es sólo un método?

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

  •  17-09-2020
  •  | 
  •  

Pregunta

Estoy jugando con la interoperabilidad entre C# y IronRuby.He notado que si puedo definir una propiedad en Ruby utilizando attr_accessor, se presenta a C# como una propiedad.Si, por otro lado, puedo crear exactamente el mismo código manualmente, se vuelve como un método.

Por ejemplo, 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;

Cuando se mira en el C# automatic variable, el valor es una cadena de "pruebas".Si usted mira en el C# manual variable, es el tipo de IronRuby.Builtins.RubyMethod.

Finalmente, quiero crear mi propio propiedades en Ruby que puede ser utilizado en C#, pero me parece que no puede hacer de ellos será visible como propiedades como attr_accessor no.

CREO que hay algo de magia en el Módulo de código de Ruby código fuente (ModuleOps.cs:DefineAccessor).Hay alguna forma de hacer esto en código Ruby directamente?

¿Fue útil?

Solución

Este problema en particular se analizan más adelante en el IronRuby-Core hilo:http://rubyforge.org/pipermail/ironruby-core/2010-July/007154.html

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top