هل هناك طريقة للحصول على متغيرات فئة مع setter/getter مثل المتغيرات الافتراضية؟

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

  •  02-07-2019
  •  | 
  •  

سؤال

أقوم بتضمين Ruby في مشروع C الخاص بي وأريد تحميل العديد من الملفات التي تحدد فئة موروثة من صفي الأصلي.تحتاج كل فئة موروثة إلى تعيين بعض المتغيرات عند التهيئة ولا أريد أن يكون لدي متغيرين مختلفين لـ Ruby وC.

هل هناك طريقة لتحديد متغير فئة يحتوي على أداة ضبط/أداة مخصصة خاصة به أم أن هذه طريقة غبية للتعامل معه؟ربما سيكون من الأفضل مع نوع بيانات مخصص؟

هل كانت مفيدة؟

المحلول

لست متأكدًا بالضبط مما تطلبه.بالطبع يمكن أن تحتوي متغيرات الفئة على حروف ومحددات (وخلف الكواليس يمكنك تخزين القيمة بالطريقة التي تريدها).هل يساعد هذا المقتطف في إلقاء الضوء على أي شيء؟

>> class TestClass
>>   def self.var
>>     @@var ||= nil
>>   end
>>   def self.var=(value)
>>     @@var = value
>>   end
>> end
=> nil
>> 
?> TestClass::var
=> nil
>> TestClass::var = 5
=> 5
>> TestClass::var
=> 5

إذا كنت مهتمًا بالبرمجة الوصفية بأكملها، فيمكنك تنفيذ طريقة class_attr_accessor المشابهة لـ attr_accessor طريقة.ما يلي يعادل الكود أعلاه.

class Module
  def class_attr_accessor(attribute_name)
    class_eval <<-CODE
      def self.#{attribute_name}
        @@#{attribute_name} ||= nil
      end
      def self.#{attribute_name}=(value)
        @@#{attribute_name} = value
      end
    CODE
  end
end

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