我在玩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代码中有什么方法可以直接做到这一点吗?