我正在玩C#和IronRuby之间的互操作。我注意到,如果我使用attr_accessor
在Ruby中定义属性,则该属性将作为属性呈现给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
变量时,该值为字符串“测试”。如果查看C#manual
变量,则其类型为IronRuby.Builtins.RubyMethod。最终,我想在Ruby中创建自己的可在C#中使用的属性,但是我似乎无法像
attr_accessor
这样使它们可见。我认为,Ruby源代码的模块代码(ModuleOps.cs:DefineAccessor)中发生了一些魔术。有什么办法可以直接在Ruby代码中执行此操作?
最佳答案
IronRuby-Core线程中进一步讨论了这个特定问题:
http://rubyforge.org/pipermail/ironruby-core/2010-July/007154.html