我有一个用户模型,它有投票方法.我想写代理方法进行投票.
这是可读的方式:
def vote_up item
return false unless can? :vote, item
vote item, :up
end
def vote_down item
return false unless can? :vote, item
vote item, :down
end
Run Code Online (Sandbox Code Playgroud)
这是干的方式:
%w(up down).each do |vtype|
define_method "vote_#{vtype}" do |item|
return false unless can? :vote, item
vote item, vtype.to_sym
end
end
Run Code Online (Sandbox Code Playgroud)
哪一个更好,为什么?
纯粹是因为OP似乎喜欢我的评论,我将其作为答案:
就我个人而言,考虑到您这里只有 2 个方法,并且您不太可能添加更多方法(vote_sideways? vote_diagonally?),我只会采用可读的方式。如果您可能有更多,更多,我会采用 DRY 方式(因为它变得容易扩展)并带有可读的注释来向其他开发人员(或稍后向您自己解释!)。