R.tap
はよほどの事がない限り、基本的にはR.tap(console.log)
を好きな箇所に挿入して使う感じになります。
どうせ基本的には第一引数以外見ませんからね。
質問文のargumentsやthisが宣言されてないのは、
アロー関数はこれらの暗黙的な変数を作らないからです。
これはES2015の罠なのでハマったら思い出してください。
R.tap(function(){ console.log(arguments) })
という風に明示的に書けばアクセス出来るでしょう。
まぁ、見たところでpipeは戻り値1個を持って返ってきて、次の関数を引数1個で叩く設計なのであんまり意味ないと思いますけど。
【おまけ】
JavaScript
1// 自作のメソッド
2const myFunc = v => v * v
これは効率はともかくRamda.jsで作れますね。
俗に言うポイントフリースタイルってやつです。
JavaScript
1const myFunc = R.pipe(
2 R.repeat(R.__, 2),
3 R.product
4)
5console.log(myFunc(10)) // 100
6console.log(myFunc(12)) // 144
なのでmyFuncを消しちゃってこういう風にしても同じ動きすると思いますよ。
JavaScript
1const main = R.pipe(
2 R.pickAll,
3 R.values,
4 R.tap(v => {
5 // 処理中の値を見たい
6 // console.log(v)
7 // console.log(arguments)
8 // console.log(this)
9 // console.log(R.__);
10 }),
11 R.sum,
12 R.repeat(R.__, 2),
13 R.product
14)
【おまけのおまけ】
ポイントフリースタイルはかっこいいですが、
潔癖になりすぎるとキモいコードになってしまいます。
特に出入り口の型は意味不明にならないように気をつけてくださいね!
引数や型はこんな感じでコメントで明示したり、
引数2つとる関数で包んでおいたほうが後々のコードリーディングで楽だと思います。
今回は両方の対応してますが、片方だけでも良いと思います。
JavaScript
1// この書き方はHaskellの書式を参考にしています。Ramda.jsのドキュメントでも関数名タイトルのすぐ下に同じ表記の物がありますね。
2// main :: Array -> Object -> Number
3const main = R.curry((data2, data) => R.pipe(
4 R.pickAll(data2),
5 R.values,
6 R.sum,
7 R.repeat(R.__, 2),
8 R.product
9)(data))
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/11 11:13
2018/04/11 11:15
2018/04/11 11:17
2018/04/11 11:17
2018/04/11 11:36 編集
2018/04/11 12:13
2018/04/11 12:22
2018/04/11 12:27