В Ruby у объектов есть удобный метод, называемый method_missing
, который позволяет обрабатывать вызовы методов для методов, которые даже не были (явно) определены:
Вызывается Ruby, когда obj отправляется сообщение, которое он не может обработать. Символ - это символ для вызываемого метода, а аргументы - любые аргументы, которые были переданы ему. По умолчанию интерпретатор выдает ошибку при вызове этого метода. Однако возможно переопределить метод, чтобы обеспечить более динамичное поведение. В приведенном ниже примере создается класс 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
и как вы реализуете эквивалент в своем коде?