Ruby ile ilgili harika şeylerden biri, yöntem veya sınıf tanımları gibi diğer dillerin kaşlarını çattığı yerlerde yöntemleri çağırabilir ve kod çalıştırabilmenizdir.
Örneğin, çalışma zamanına kadar bilinmeyen bir üst sınıfa sahip, yani rasgele olan bir sınıf oluşturmak için aşağıdakileri yapabilirsiniz:
class RandomSubclass < [Array, Hash, String, Fixnum, Float, TrueClass].sample
end
RandomSubclass.superclass # could output one of 6 different classes.
Bu, 1.9 Array#sample
yöntemini kullanır (yalnızca 1.8.7'de, bkz. Array#choice
) Ve örnek oldukça uyumludur, ancak gücü burada görebilirsiniz.
Bir başka harika örnek, sabit olmayan varsayılan parametre değerlerini koyma yeteneğidir (diğer diller genellikle talep ettiği gibi):
def do_something_at(something, at = Time.now)
# ...
end
Tabii ki ilk örnekle ilgili problem, çağrı zamanına değil tanım zamanına göre değerlendirilmesidir. Böylece, bir üst sınıf seçildikten sonra, programın geri kalanı için bu üst sınıf kalır.
Bununla birlikte, ikinci örnekte, her aradığınızda do_something_at
, at
değişken yöntemin çağrıldığı zaman olacaktır (buna çok çok yakın)