У меня есть каркас Ruby-Cucumber. Мне нужно использовать метод method_missing
, чтобы избежать написания нескольких повторяющихся функций. Где я должен разместить свой method_missing
? В любом файле .rb
под папкой support
? Или он должен идти в каком-то другом конкретном файле?Где я должен определить method_missing в структуре Rubber Rubber?
ответ
Определение method_missing
, как и любой вспомогательный метод огурца, в .rb
файл в каталоге support
и в модуле, который вы затем перейти к the Cucumber World
:
module MethodMissing
def method_missing(method)
puts "You said #{method}"
end
end
World MethodMissing
Затем можно вызывать методы отсутствующие в ступенчатых определений.
Как и любой вспомогательный метод огурца, method_missing
следует определять только на огурце World
. Если вы определили его на верхнем уровне файла поддержки, он будет определен на объекте верхнего уровня Ruby и доступен повсеместно, что не имеет аналогов и может сломать другой код.
я намеренно не отложить до super
, поскольку World
не определяет method_missing
, или определить respond_to_missing?
, так как у меня не было никаких планов для вызова method(:foo)
на World
, но вы можете сделать эти вещи, если вы предпочитаете всегда делать это, когда вы определяете method_missing
.
Пробовать здесь: Сообщение озаглавлено: «Переопределить метод_изменения для методов класса и экземпляра?» и вы можете получить некоторые идеи о том, как это сделать. http://stackoverflow.com/questions/22846777/override-method-missing-for-class-and-instance-methods – BKSpurgeon