Por que attr_accessor criar uma propriedade, mas o método é apenas um método?
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?
Solução
Este particular problema foi discutido no IronRuby-Núcleo de thread:http://rubyforge.org/pipermail/ironruby-core/2010-July/007154.html