我正在玩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。建造。RubyMethod。

最终,我想在Ruby中创建自己的属性,可以在C#中使用,但我似乎无法使它们作为属性可见,如 attr_accessor 确实如此。

我认为,Ruby源代码的模块代码(ModuleOps)有一些魔术。cs:DefineAccessor)。有没有办法直接在Ruby代码中做到这一点?

有帮助吗?

解决方案

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top