Pourquoi ne attr_accessor créer une propriété, mais la méthode n'est qu'une méthode?
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?
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