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?

È stato utile?

Soluzione

Questo particolare problema è stato discusso ulteriormente nel thread IronRuby-Core:http://rubyforge.org/pipermail/ironruby-core/2010-July/007154.html

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top