উত্তরগুলি আংশিকভাবে সঠিক কারণ @@ আসলে একটি শ্রেণি পরিবর্তনশীল যা প্রতি শ্রেণীবৃত্ত হয় যার অর্থ এটি একটি শ্রেণীর দ্বারা ভাগ করা হয়, এর উদাহরণগুলি এবং তার বংশধর শ্রেণি এবং তাদের উদাহরণগুলি।
class Person
@@people = []
def initialize
@@people << self
end
def self.people
@@people
end
end
class Student < Person
end
class Graduate < Student
end
Person.new
Student.new
puts Graduate.people
এই আউটপুট হবে
#<Person:0x007fa70fa24870>
#<Student:0x007fa70fa24848>
সুতরাং ব্যক্তি, শিক্ষার্থী এবং স্নাতক শ্রেণীর জন্য একমাত্র একই @@ ভেরিয়েবল এবং এই শ্রেণীর সমস্ত শ্রেণি এবং উদাহরণ পদ্ধতিগুলি একই ভেরিয়েবলের উল্লেখ করে।
ক্লাস ভেরিয়েবলকে সংজ্ঞায়নের আরেকটি উপায় রয়েছে যা একটি শ্রেণীর অবজেক্টের উপর সংজ্ঞায়িত হয় (মনে রাখবেন যে প্রতিটি শ্রেণি আসলে এমন কোনও কিছুর উদাহরণ যা আসলে ক্লাস শ্রেণি তবে এটি অন্য গল্প)। আপনি @ এর পরিবর্তে @ স্বরলিপি ব্যবহার করেন তবে উদাহরণ পদ্ধতিগুলি থেকে আপনি এই পরিবর্তনকগুলি অ্যাক্সেস করতে পারবেন না। আপনার ক্লাসের পদ্ধতি র্যাপারগুলি থাকা দরকার।
class Person
def initialize
self.class.add_person self
end
def self.people
@people
end
def self.add_person instance
@people ||= []
@people << instance
end
end
class Student < Person
end
class Graduate < Student
end
Person.new
Person.new
Student.new
Student.new
Graduate.new
Graduate.new
puts Student.people.join(",")
puts Person.people.join(",")
puts Graduate.people.join(",")
এখানে, @ শ্রেণি শ্রেণিবিন্যাসের পরিবর্তে জনগণ প্রতি ক্লাসে একক কারণ এটি প্রতিটি শ্রেণীর উদাহরণগুলিতে আসলে পরিবর্তনশীল stored এটি আউটপুট:
#<Student:0x007f8e9d2267e8>,#<Student:0x007f8e9d21ff38>
#<Person:0x007f8e9d226158>,#<Person:0x007f8e9d226608>
#<Graduate:0x007f8e9d21fec0>,#<Graduate:0x007f8e9d21fdf8>
একটি গুরুত্বপূর্ণ পার্থক্য হ'ল আপনি উদাহরণস্বরূপ পদ্ধতিগুলি থেকে সরাসরি এই শ্রেণীর ভেরিয়েবলগুলি (বা শ্রেণীর উদাহরণের ভেরিয়েবলগুলি বলতে পারবেন) অ্যাক্সেস করতে পারবেন না কারণ একটি উদাহরণ পদ্ধতিতে লোকজন ব্যক্তি বা শিক্ষার্থী বা স্নাতক শ্রেণীর সেই নির্দিষ্ট উদাহরণের একটি উদাহরণ পরিবর্তনশীলকে বোঝায় ।
সুতরাং অন্য উত্তরগুলি সঠিকভাবে জানিয়েছে যে @myvariable (একক @ স্বরলিপি সহ) সর্বদা একটি উদাহরণ পরিবর্তনশীল, এর অর্থ এই নয় যে এই শ্রেণীর সমস্ত দৃষ্টান্তের জন্য এটি একক ভাগের পরিবর্তনশীল নয়।