Perché attr_accessor crea una proprietà, ma il metodo è solo un metodo?
Domanda
Sto giocando con l'interoperabilità tra C# e IronRuby.Ho notato che se definisco una proprietà in Ruby utilizzando attr_accessor
, viene presentato a C# come proprietà.Se invece creo manualmente lo stesso identico codice, ritorna come metodo.
Ad esempio, prendi questo codice:
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 guardi il C# automatic
variabile, il valore è una stringa di "testing".Se guardi il C# manual
variabile, è di tipo IronRuby.Builtins.RubyMethod.
In definitiva, voglio creare le mie proprietà in Ruby che possano essere utilizzate in C#, ma non riesco a renderle visibili come proprietà come attr_accessor
fa.
PENSO che ci sia della magia nel codice del modulo del codice sorgente di Ruby (ModuleOps.cs:DefineAccessor).C'è un modo per farlo direttamente nel codice Ruby?
Soluzione
Questo particolare problema è stato discusso ulteriormente nel thread IronRuby-Core:http://rubyforge.org/pipermail/ironruby-core/2010-July/007154.html