私はClojureにかなり慣れていないので、関数へのいくつかの呼び出しを並列化しようとしています.
次のようなマップがあるとします。
{:a 1 :b 2 :c 3}
キーと値を my-function という関数の引数として使用し、キーと値のペアごとに呼び出される関数を使用したいと考えています。doseq
以下のように使用できます。
(doseq [entry my-map] (my-function (key entry) (val entry)))
次に、my-function の呼び出しを並列にすることにしました (実際の状況では、my-function は互いに独立した残りの呼び出しを行うため、それらを並列で実行したいと考えています)。私は次のことを思いつきました:
(apply pcalls (map #(partial my-function (key %) (val %)) my-map))
これは期待どおりに動作するようです (私が間違っている場合、またはより良い方法がある場合は修正してください)。私が今抱えている問題は、Midje テストに合格することです。doseq
上記のバージョンを使用すると、正しく通過します。私のテストでは、正しい呼び出しが行われることを確認するために (提供された .... ) を使用しています。これを使用して、my-function の呼び出しを確認したいと考えています。これを行うことは可能ですか?pcalls に関する多くの情報を見つけるのは難しいと感じています。
ありがとう
- - - - - 編集 - - - - -
失敗を示す例を考案しました。
実装はここにあり、テストはここにあります。単一のテストは正常に実行されることがわかりましたが、複数のテストでは次のことが発生します。
(pcalls_unit.clj:29) で FAIL これらの呼び出しは適切な回数行われませんでした: (my-func 2 2) [少なくとも 1 回は期待されていましたが、実際には呼び出されませんでした]
FAIL "Test some pcalls 3" at (pcalls_unit.clj:26) Expected: nil 実際: java.util.concurrent.ExecutionException: java.lang.Error: pcalls-test.pcalls/my- の前提条件を作成したようですMidje 自身のコードでのその関数の使用を妨げる func。修正するには、my-func を使用する独自の関数を定義し、提供された句にその関数を記述します。