C#과 IronRuby 사이의 interop을 가지고 놀고 있습니다. Ruby에서 attr_accessor
을 사용하여 속성을 정의하면 C#에 속성으로 표시된다는 것을 알았습니다. 반면에, 내가 정확히 동일한 코드를 수동으로 생성한다면, 그것은 다시 방법으로 돌아옵니다.attr_accessor가 속성을 만드는 이유는 무엇입니까?
예를 들어,이 코드를 가지고 :
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 유형입니다.
궁극적으로 C#에서 사용할 수있는 Ruby에서 내 자신의 속성을 만들고 싶지만 attr_accessor
과 같은 속성으로 표시 할 수없는 것처럼 보입니다.
내가 생각하기에는 루비 소스 코드 (ModuleOps.cs : DefineAccessor)의 모듈 코드에 몇 가지 마술이있다. Ruby 코드에서 직접이 작업을 수행 할 수있는 방법이 있습니까?