لماذا هذا متاحة للجمهور في بلدي على سبيل المثال: "MySymbol :: TABLE"

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

سؤال

class MySymbol
  TABLE={}
  def initialize(str) @str = str end
  def to_s() @str end
  def ==(other)
    self.object_id == other.object_id
  end
end

class String
  def my_intern
    table = MySymbol::TABLE
    unless table.has_key?(self)
      table[self] = MySymbol.new(self)
    end
    table[self]
  end
end

"foo".my_intern

في المثال أعلاه، التي وجدت على بلوق، وأنا أفهم أن الجدول هو تجزئة وعضو من الطبقة MySymbol. ما لا أفهمه هو كيف يمكن الوصول للجمهور من داخل الفئة سلسلة. اعتقدت المتغيرات مثيل فئة هي خاصة افتراضيا وتحتاج إلى استخدام الحصول على / الطرق المقرر أن الوصول إليها من خارج الطبقة؟

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

المحلول

في المثال الخاص بك، TABLE هو ثابت، لا مثيل (أو فئة) متغير (أي ليس مسبوقة @ خفة دم).

وكذلك المتغيرات سبيل المثال ليست "خاصة افتراضيا" (على سبيل المثال، كما هو الحال مع فئات C ++)، على الرغم من أنها قد تبدو ظاهريا بهذه الطريقة. هم ببساطة لا يمكن الوصول إليها خارج الصف <م> حسب التصميم ، ليس لأنهم "الخاص" (لا يمكنك جعلها "غير والخاص".)

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