В Ruby объекты имеют удобный метод под названием method_missing
, который позволяет обрабатывать вызовы методов для тех методов, которые даже не были (явно) определены:
Вызывается Ruby, когда obj отправляется сообщение, которое он не может обработать. символ - это символ вызываемого метода, а args - любые аргументы, которые были переданы ему. По умолчанию интерпретатор вызывает ошибку при вызове этого метода. Тем не менее, можно переопределить метод, чтобы обеспечить более динамичное поведение. В приведенном ниже примере создается класс Roman, который отвечает на методы с именами, состоящими из римских цифр, возвращающими соответствующие значения целых чисел.
class Roman
def romanToInt(str)
# ...
end
def method_missing(methId)
str = methId.id2name
romanToInt(str)
end
end
r = Roman.new
r.iv #=> 4
r.xxiii #=> 23
r.mm #=> 2000
Например, Ruby on Rails использует это, чтобы разрешать вызовы таким методам, как find_by_my_column_name
.
Мой вопрос в том, что другие языки поддерживают эквивалент method_missing
, и как вы реализуете эквивалент в своем коде?