Salah satu hal keren tentang ruby adalah Anda dapat memanggil metode dan menjalankan kode di tempat yang disukai oleh bahasa lain, seperti dalam metode atau definisi kelas.
Misalnya, untuk membuat kelas yang memiliki superclass yang tidak diketahui sampai waktu berjalan, yaitu acak, Anda bisa melakukan hal berikut:
class RandomSubclass < [Array, Hash, String, Fixnum, Float, TrueClass].sample
end
RandomSubclass.superclass # could output one of 6 different classes.
Ini menggunakan Array#sample
metode 1.9 (hanya 1.8.7, lihat Array#choice
), dan contohnya cukup dibuat tetapi Anda dapat melihat kekuatannya di sini.
Contoh keren lainnya adalah kemampuan untuk menempatkan nilai parameter default yang tidak tetap (seperti bahasa lain yang sering diminta):
def do_something_at(something, at = Time.now)
# ...
end
Tentu saja masalah dengan contoh pertama adalah bahwa ia dievaluasi pada waktu definisi, bukan waktu panggilan. Jadi, sekali superclass telah dipilih, ia tetap superclass itu untuk sisa program.
Namun, dalam contoh kedua, setiap kali Anda menelepon do_something_at
, at
variabel akan menjadi waktu metode dipanggil (well, sangat sangat dekat dengannya)