لماذا يقوم attr_accessor بإنشاء خاصية، ولكن الطريقة هي مجرد طريقة؟

StackOverflow https://stackoverflow.com/questions/3277885

  •  17-09-2020
  •  | 
  •  

سؤال

أنا ألعب مع التشغيل المتداخل بين 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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top