2017-02-15 5 views
0

関数型プログラミングには新しく、パイプに関する質問があります。親関数が異なる引数を受け取ったときにパイプを実装する方法

は、私は、以下の機能を持っていると言う:

const modifyArr = R.curry((i, newValue, arr) => 
        Object.assign([], arr, {[i]: newValue})) 

この機能は、特定のインデックスの配列の値を変更します。

ここでは、配列の2つの要素間のスワップを実装するために、この関数を2回(パイプで)使用します。

私はそれを書く方法を理解できません。これは私が得たものである:(二つの引数を受け取った後)modifyArrのカリー化バージョンは、配列を期待するが、私はスワップ機能に3つの引数を渡していることを

const swap = (arr, a, b) => 
       R.pipe(modifyArr(b, arr[a], modifyArr(a, arr[b]))) 

注意してください。

親の関数がパイプ内の最初の関数とは異なる引数を受け取る場合、どうすればよいでしょうか?

ありがとうございました。あなたの関数はカリー化されていることを考えると

+1

あなたはそのように入れ替えることができない、一つのインデックスの値が最初の変数に格納する必要がありますまたはもう一方の値を2回取得します。 –

+0

@ibrahimmahrir実際には、JSの引数評価の順番を考えればうまくいくはずですが、本当に混乱します。 – Bergi

答えて

2

、あなたは、単に部分的に配管を行う前に、元の引数を適用することができます。

const swap = (arr, a, b) => R.pipe(modifyArr(a, arr[b]), modifyArr(b, arr[a]))(arr); 
+0

うわー、とても簡単です。どうもありがとう!! – Hasholef

関連する問題