Pourquoi ne attr_accessor créer une propriété, mais la méthode n'est qu'une méthode?

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

  •  17-09-2020
  •  | 
  •  

Question

Je suis à jouer avec l'interopérabilité entre C# et IronRuby.J'ai remarqué que si je définir une propriété dans Ruby à l'aide de attr_accessor, il est présenté à C# en tant que propriété.Si, d'autre part, j'ai créer exactement le même code manuellement, il revient comme une méthode.

Par exemple, prenez ce code:

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;

Quand vous regardez le C# automatic variable, la valeur est une chaîne de "testing".Si vous regardez le C# manual variable, il est de type IronRuby.Les builtins.RubyMethod.

En fin de compte, je veux créer mes propres propriétés en Ruby qui peut être utilisé en C#, mais je n'arrive pas à les rendre visibles en tant que propriétés comme attr_accessor n'.

Je PENSE, qu'il y a quelque chose de magique se passe dans le Module de code de la version du code source Ruby (ModuleOps.cs:DefineAccessor).Est-il possible de le faire dans le code Ruby directement?

Était-ce utile?

La solution

Ce problème a été discuté plus loin dans le IronRuby-Core thread:http://rubyforge.org/pipermail/ironruby-core/2010-July/007154.html

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top