是否可以致电before_action
在某些指定的方法之前,比如在 Rails 中?
class Calculator
before_action { raise Exception, "calculator is empty" if @numbers.nil? },
only: [:plus, :minus, :divide, :times]
def push number
@numbers ||= []
@numbers << number
end
def plus
# ...
end
def minus
# ...
end
def divide
# ...
end
def times
# ...
end
# ...
end
可以用纯 Ruby 来完成!一种方法是使用方法别名 http://apidock.com/ruby/Module/alias_method
class Foo
def bar
#true bar
end
alias_method :original_bar, :bar
def bar
before_stuff
original_bar
after_stuff
end
end
但对于更通用的方法,你可以阅读这个线程 https://stackoverflow.com/questions/5513558/executing-code-for-every-method-call-in-a-ruby-module.
您的代码示例可以是:
class Calculator
def plus
# ...
end
def end
# ...
end
def divide
# ...
end
def times
# ...
end
[:plus, :minus, :divide, :times].each do |m|
alias_method "original_#{m.to_s}".to_sym, m
define_method m do
check_numbers
send("original_#{m.to_s}".to_sym)
end
end
private
def check_numbers
raise Exception, "calculator is empty" if @numbers.nil?
end
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)