以这种方式调用实例方法时......
Foo.new(n).bar
如果bar
符合n
方法中的特定条件,是否可以阻止initialize
被解雇?
示例:
class Foo
def initialize(n)
if n == SOMETHING
# Break and prevent 'bar' from firing
end
end
def bar
# Do something
end
end
编辑:使用案例:我在课堂上有大约10种方法。我需要在任何方法触发之前检查相同的条件。我宁愿不用条件检查逻辑来混淆实例方法。
EDIT 2 该类实际上是一个事件跟踪类,它将事件数据发送到我的分析。要检查的条件是IP地址和用户名,因此我不会在生产中传输自己的事件数据。方法调用将遍及整个应用程序,它们并不真正属于(混合业务逻辑),所以我试图尽可能减少占用空间。如果我每次都需要检查IP地址和用户,它会变得很难看。
答案 0 :(得分:2)
使用alias_method_chain
(来自activesupport)的解决方案进入我的脑海。
class Foo
def initialize(n)
@break_execution = n == SOMETHING
end
def bar
# do something
end
def foo
# do something
end
def baz
# do something
end
%w(foo bar baz).each do |method|
define_method "#{method}_with_break_check" do |*args, &block|
unless @break_execution
send("#{method}_without_break_check", *args, &block)
end
end
alias_method_chain method, :break_check
end
end