রুবি সম্পর্কে একটি দুর্দান্ত জিনিস হ'ল আপনি পদ্ধতিগুলিতে কল করতে পারেন এবং অন্য ভাষাগুলি যে জায়গাগুলির উপর ভিত্তি করে এমন পদ্ধতিতে কোড চালাতে পারেন যেমন পদ্ধতি বা শ্রেণির সংজ্ঞা হিসাবে।
উদাহরণস্বরূপ, একটি ক্লাস তৈরি করতে যার অজানা সুপারক্লাস রয়েছে রান সময় পর্যন্ত, অর্থাৎ এলোমেলো, আপনি নিম্নলিখিতটি করতে পারেন:
class RandomSubclass < [Array, Hash, String, Fixnum, Float, TrueClass].sample
end
RandomSubclass.superclass # could output one of 6 different classes.
এটি 1.9 Array#sampleপদ্ধতিটি ব্যবহার করে (কেবলমাত্র 1.8.7-এ, দেখুন)Array#choice ), এবং উদাহরণটি বেশ স্বীকৃত তবে আপনি এখানে শক্তি দেখতে পারেন।
অন্য একটি দুর্দান্ত উদাহরণ হ'ল ডিফল্ট প্যারামিটার মানগুলি রাখার ক্ষমতা যা স্থির নয় (অন্যান্য ভাষাগুলির মতো প্রায়শই দাবি করে):
def do_something_at(something, at = Time.now)
# ...
end
অবশ্যই প্রথম উদাহরণটির সাথে সমস্যাটি হ'ল এটি কল সময় নয়, সংজ্ঞা সময়ে মূল্যায়ন করা হয়। সুতরাং, একবার একটি সুপারক্লাস নির্বাচন করা হয়ে গেলে, এটি সেই প্রোগ্রামের বাকী অংশের জন্য সেই সুপারক্লাস থেকে যায়।
তবে দ্বিতীয় উদাহরণে, আপনি যখনই কল করবেন do_something_atতখন atচলকটি পদ্ধতিটি বলা হওয়ার সময় হবে (ভাল, এর খুব কাছেই)