Metaprogramming là viết code sinh ra hoặc sửa đổi code khác lúc runtime — thay vì viết cứng từng method, ta dùng các công cụ của Ruby để tự động hóa. Ví dụ đơn giản nhất: attr_accessor :name tự sinh getter + setter thay vì viết thủ công.
Công cụ chính:
- define_method — định nghĩa method động.
- method_missing — bắt call đến method chưa tồn tại.
- send / public_send — gọi method bằng tên string/symbol.
- class_eval / instance_eval — chạy code trong context class/object.
Rails dùng metaprogramming rộng rãi: has_many, belongs_to, validates đều là macro sinh method lúc load class.