代码之家  ›  专栏  ›  技术社区  ›  Brian Genisio

为什么attr_访问器创建一个属性,但方法只是一个方法?

  •  2
  • Brian Genisio  · 技术社区  · 14 年前

    我在玩C和IronRuby之间的互操作。我注意到,如果我在Ruby中使用 attr_accessor ,它作为一种财产呈现给C。另一方面,如果我手工创建完全相同的代码,它会作为一个方法返回。

    例如,采用以下代码:

    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;
    

    当你看到C# automatic 变量,该值是一个字符串“testing”。如果你看C# manual 变量,它是IronRuby.Builtins.RubyMethod类型。

    最后,我想在Ruby中创建自己的属性,这些属性可以在C中使用,但我似乎无法使它们作为属性像 访问器 做。

    我认为,Ruby源代码的模块代码(moduleops.cs:defineaccessor)中有一些神奇之处。在Ruby代码中有什么方法可以直接做到这一点吗?

    1 回复  |  直到 14 年前
        1
  •  0
  •   Brian Genisio    14 年前

    在IronRuby核心线程中进一步讨论了这个特定问题: http://rubyforge.org/pipermail/ironruby-core/2010-July/007154.html