لماذا هذا متاحة للجمهور في بلدي على سبيل المثال: "MySymbol :: TABLE"
سؤال
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 ++)، على الرغم من أنها قد تبدو ظاهريا بهذه الطريقة. هم ببساطة لا يمكن الوصول إليها خارج الصف <م> حسب التصميم م>، ليس لأنهم "الخاص" (لا يمكنك جعلها "غير والخاص".)
لا تنتمي إلى StackOverflow