Посчитайте, сколько методов в методе?

Так что, если есть два метода:

def foo
   method1
   method2
end

Как можно проверить, все ли эти "method1/method2" были выполнены в самом методе? Как может подсчитываться количество раз, когда метод вызывается? Код также должен быть внутри method1 или method2, чтобы проверить это.

1 ответ

Решение

Возможно, это легко сделать по-другому, но этот способ кажется чистым и модульным.

Создайте прокси-класс с именем method_counter, который удаляет свои собственные методы и определяет missing_method, get_method_counts и конструктор. Вы можете увидеть примеры того, как это сделать, здесь: http://www.binarylogic.com/2009/08/07/how-to-create-a-proxy-class-in-ruby/

Теперь конструктор берет любой другой объект и хранит его внутри. Метод get метода count возвращает хэш метода methodname => count.

Недостающий метод вызывается ruby ​​всякий раз, когда кто-то вызывает метод для прокси-объекта, который не существует... И затем вы должны реализовать его для вызова того же метода для содержащегося в нем объекта (переданного в конструкторе) после обновления хэша счетчика методов.

Эта реализация чиста, потому что вы не коснулись кода целевых объектов, и вызывающему коду нужно будет только изменить 1 строку (конструктор целевого объекта вместо этого создает прокси).

Другие вопросы по тегам