Да, это называется method_missing
; он вызывается всякий раз, когда используется неопределенный метод. Вы можете использовать его для добавления или эмуляции любого метода, который вам нужен, включая методы доступа.
Например, если вы выбрасываете это на Hash
, вы можете рассматривать содержимое хэша как свойства:
h = {}
def h.method_missing(*args)
if args.length == 1
self[args[0]]
elsif args.length == 2 and args[0].to_s =~ /^(.*)=$/
self[$1.intern] = args[1]
else
super
end
end
давайте напишем:
h.bob = "Robert"
и
if h.bill == "William" ...
и т. Д. В дополнение к более обычному стилю h[:bob] = ...
.