0

複雑に見えない設計上の問題を念頭に置いていますが、それを解決する方法を自分で見つけることができません。可能な限りDRYの原則に従いたいと思います。

私は2つの機能を持っています。1 つはアルゴリズムの基本バージョンで、もう 1 つは並列プログラミングによる改善です。それらは 2 つあり、私の目的は、「並列」などの追加パラメーターを使用して、そのうちの 1 つだけを記述することです。ここに疑似コードがあります。

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の初心者なので、関数型プログラミングが違いを生むかどうかはわかりません.

4

1 に答える 1

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

もう 1 つの方法は、常にスレッドで実行し、パラメーター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
于 2012-05-29T08:10:28.860 に答える