এর উত্স এখানে cattr_accessor
এবং
এর উত্স এখানে mattr_accessor
আপনি দেখতে পাচ্ছেন যে এগুলি দেখতে অনেকটা অভিন্ন।
কেন দুটি ভিন্ন সংস্করণ আছে? কখনও কখনও আপনি cattr_accessor
কোনও মডিউলটিতে লিখতে চান , আপনি এটি অ্যাভিডি উল্লেখ করার মতো কনফিগারেশন তথ্যের জন্য ব্যবহার করতে পারেন ।
যাইহোক, cattr_accessor
মডিউলটিতে কাজ করে না, তাই তারা মডিউলগুলির জন্য কাজ করার জন্য কোডটি কমবেশি অনুলিপি করে।
অধিকন্তু, কখনও কখনও আপনি মডিউলে একটি ক্লাস পদ্ধতি লিখতে চাইতে পারেন, যেমন যে কোনও ক্লাসে মডিউল অন্তর্ভুক্ত থাকে, এটি ক্লাস পদ্ধতিটি পাশাপাশি সমস্ত দৃষ্টান্তের পদ্ধতিগুলি পায়। mattr_accessor
আপনাকে এটি করতে দেয়।
তবে, দ্বিতীয় দৃশ্যে এটির আচরণটি বেশ আশ্চর্যজনক। নিম্নলিখিত কোডটি পর্যবেক্ষণ করুন, বিশেষত @@mattr_in_module
বিটগুলি নোট করুন
module MyModule
mattr_accessor :mattr_in_module
end
class MyClass
include MyModule
def self.get_mattr; @@mattr_in_module; end # directly access the class variable
end
MyModule.mattr_in_module = 'foo' # set it on the module
=> "foo"
MyClass.get_mattr # get it out of the class
=> "foo"
class SecondClass
include MyModule
def self.get_mattr; @@mattr_in_module; end # again directly access the class variable in a different class
end
SecondClass.get_mattr # get it out of the OTHER class
=> "foo"
mattr_accessor
শ্রেণি উদাহরণের ভেরিয়েবল (@variable
গুলি) এর জন্য সংক্ষিপ্ত হবে , তবে উত্স কোডটি প্রকাশিত বলে মনে হচ্ছে যে তারা প্রকৃতপক্ষে শ্রেণীর ভেরিয়েবলগুলি সেট / পাঠ করছে। আপনি কি এই পার্থক্যটি ব্যাখ্যা করতে পারেন?