¿Por qué attr_accessor crear una propiedad, pero el método es sólo un método?
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?
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