لماذا يقوم attr_accessor بإنشاء خاصية، ولكن الطريقة هي مجرد طريقة؟
سؤال
أنا ألعب مع التشغيل المتداخل بين C# وIronRuby.لقد لاحظت أنه إذا قمت بتحديد خاصية في روبي باستخدام 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
المتغير، القيمة عبارة عن سلسلة من "الاختبار".إذا نظرت إلى C# manual
متغير، وهو من النوع IronRuby.Builtins.RubyMethod.
في النهاية، أريد إنشاء خصائصي الخاصة في Ruby والتي يمكن استخدامها في C#، لكن يبدو أنني لا أستطيع جعلها مرئية كخصائص مثل attr_accessor
يفعل.
أعتقد أن هناك بعض السحر يحدث في كود الوحدة الخاص بكود مصدر روبي (ModuleOps.cs:DefineAccessor).هل هناك أي طريقة للقيام بذلك في كود روبي مباشرة؟
المحلول
تمت مناقشة هذه المشكلة بشكل أكبر في موضوع IronRuby-Core:http://rubyforge.org/pipermail/ironruby-core/2010-July/007154.html