Когда вы используете метод псевдонимов? - PullRequest
3 голосов
/ 28 августа 2009

Используете ли вы метод псевдонима для добавления дополнительных способов вызова методов (например, длины и размера) или есть другое применение для него?

Ответы [ 2 ]

3 голосов
/ 28 августа 2009

Да.

Он часто используется для сохранения дескриптора существующих методов перед их переопределением. (надуманный пример)

Учитывая класс как это:

class Foo
  def do_something
    puts "something"
  end
end

Вы можете увидеть код, который добавляет новое поведение, вот так:

class Foo
  def do_something_with_logging
    puts "started doing something"
    do_something_without_logging # call original implementation
    puts "stopped doing something"
  end

  alias_method :do_something_without_logging, :do_something
  alias_method :do_something, :do_something_with_logging
end

(именно так работает alias_method_chain)

Однако для этого варианта использования часто нецелесообразно использовать наследование и модули в ваших интересах .

Тем не менее, alias_method - это полезный инструмент, если вам абсолютно необходимо переопределить поведение в существующем классе (или если вы хотите реализовать что-то вроде alias_method_chain)

3 голосов
/ 28 августа 2009

Вызов alias_method также полезен для повторной реализации чего-либо, но для сохранения исходной версии. Есть также alias_method_chain из Rails, который делает такие вещи еще проще.

alias_method также пригодится, если у вас есть несколько поведенческих поведений, которые изначально идентичны, но могут в будущем измениться, где вы можете хотя бы приблизить их к началу.

def handle_default_situation
  nil
end

%w[ poll push foo ].each do |type|
  alias_method :"handle_#{type}_situation", :handle_default_situation
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...