我想到的设计问题看起来并不复杂,但我自己找不到解决问题的方法。我想尽可能地遵循DRY原则。
我有两个功能。一个是算法的基本版本,另一个是并行编程的改进。它们是两个,我的目标是只用其他参数写出其中一个参数,例如" parallel"。这里是伪代码。
fun1 ()
loop for par1 times
do_work()
fun2 ()
loop for par1 times
run new thread
do_work()
目前我已编码
if parallel == 0
fun1 ()
else
fun2 ()
我想要的是像
fun ()
loop for par1 times
run new thread if parallel > 0 #Ruby's syntax-like
do_work()
我想知道Ruby是否可以帮我解决这个问题。我是Ruby的新手,所以我不确定它的函数式编程能否带来不同。
答案 0 :(得分:1)
就像这样:
def fun(parallel=false)
if parallel
# called as fun(true)
else
# called as fun
end
end
如果没有传递参数, parallel=false
设置默认参数值。
或者您可以使用选项哈希来更明确地传递参数
def fun(options={})
parallel = option[:parallel] || false
if parallel
# called as fun(parallel: true)
else
# called as fun
end
end
另一种方法是始终在线程中运行do_work()
并等待线程完成,具体取决于parallel
参数。
def fun(parallel=false)
workers = []
par1.times do
worker = Thread.new { do_work() }
worker.join if parallel
workers << worker
end
workers.each(&:join)
end