在Ruby类中,我覆盖了三种方法,并且在每种方法中,我基本上都做同样的事情:
class ExampleClass
def confirmation_required?
is_allowed && super
end
def postpone_email_change?
is_allowed && super
end
def reconfirmation_required?
is_allowed && super
end
end
是否有更紧凑的语法?如何缩短代码?
答案 0 :(得分:8)
如何使用别名?
class ExampleClass
def confirmation_required?
is_allowed && super
end
alias postpone_email_change? confirmation_required?
alias reconfirmation_required? confirmation_required?
end
答案 1 :(得分:1)
class ExampleClass
%i|confirmation_required?
postpone_email_change?
reconfirmation_required?|.each do |m|
define_method m do |*args, &cb|
is_allowed && super(*args, &cb)
end
end
end
注意: %i|symbol1 symbol2|
是[:symbol1, :symbol2]
的快捷方式 - 用于从单词创建符号列表的是ruby 2.0+语法。
答案 2 :(得分:0)
eval
方法。考虑到代码气味,但在这种情况下具有更好的可读性。对于团队中缺乏经验的人来说也更容易理解。
class ExampleClass
WRAPPED_METHODS = %i(
confirmation_required?
postpone_email_change?
reconfirmation_required?
)
WRAPPED_METHODS.each do |method_name|
class_eval("
def #{method_name}
is_allowed && super
end
")
end
end