我有一段我想要干的代码:
def start
queue1.pop_all do |record|
# some non-trivial logic
end
queue2.subscribe_one do |record|
# the same set of non-trivial logic
end
end
我提出的一种方法是创建一个返回proc
的私有方法:
def start
queue1.pop_all(&sync)
queue2.subscribe_one(&sync)
end
private
def sync
return proc do |record|
# some non-trivial logic
end
end
这是一种合理的方法吗?或者是否有更好,更清晰的方法来组织代码?
答案 0 :(得分:2)
在我看来,您的解决方案看起来很好。替代方案包括:
从您的区块中调用常用方法:
def start
queue1.pop_all{ |record| sync(record) }
queue2.subscribe_one{ |record| sync(record) }
end
在您的示例中,您从方法中发出一个proc,它在每次调用方法时都会重新创建proc。要解决此问题,您可以将公共proc作为变量,而不是方法调用的结果:
def start
sync = lambda{|record| /* non-trivial stuff */ }
queue1.pop_all(&sync)
queue2.subscribe_one(&sync)
end