2016-12-30 10 views
0

Ramdaで関数型プログラミングを試してみるのは初めてのことです。私は複数の機能を構成することによってAPIのエンドポイント文字列を構築しようとしています。Ramda composeを3つ以上の関数で使用するにはどうすればよいですか?

これは動作します:

const endpoint = str => str && str.toUpperCase() || 'default' 
const protocol = str => `https://${str}` 
let finalEndpoint = R.compose(protocol, endpoint) 

var result = finalEndpoint('api.content.io') 

結果が今期待

としてhttps://API.CONTENT.IOである。しかし、今、私はこのパイプラインにさらに多くの機能を追加したい:

const params = val => `?sort=desc&part=true` 
const query = val => `query={ some: value, another: value}` 

しかし、私はすべてのものを構成しようとすると、一緒にこのように:

let finalEndpoint = R.compose(protocol, endpoint, params, query) 
var result = finalEndpoint('api.content.io') 

私は上記の結果を得るために使うのですか、連鎖組成物のどのような組み合わせ

https://API.CONTENT.IO??sort=desc&part=true&query={ some: value, another: value}

を望んでいたのに対し、私はちょうどhttps://?SORT=DESC&PART=TRUEを取得しますか?

答えて

1

strパラメータを使用していませんでしたが判明:

const finalEndpoint = pipe(
    or(__, 'default'), 
    concat('https://'), 
    concat(__, '?sort=desc&part=true&'), 
    concat(__, 'query={ some: value, another: value}') 
) 

finalEndpoint('api.content.io'); 
//=> https://api.content.io?sort=desc&part=true&query={ some: value, another: value} 

このようなポイントフリーのバージョンは、あなたの好みに合っているかもしれませんが、興味深い選択肢です。

+0

これは素晴らしい@Scottですが、ハードコードされたパラメータを削除しても機能を維持するのに役立ちますか? http://stackoverflow.com/questions/41404875/how-do-i-pass-in-multiple-parameters-into-a-ramda-compose-chain –

+0

私は[あなたの他の質問]に応答しました(http:// stackoverflow .com/questions/41404875)。 –

0
var R = require('ramda'); 

const endpoint = str => `${str}` || 'default' 
const protocol = str => `https://${str}` 
const params = str => `${str}?sort=desc&part=true&` 
const query = str => `${str}query={ some: value, another: value}` 

let finalEndpoint = R.compose(query, params, protocol, endpoint) 

var result = finalEndpoint('api.content.io') 

console.log(result) 

私はRAMDAのユーザーにはおなじみに見えるかもしれませんが、この変動は、無名関数のパイプラインでこれを書くことになり、正しく

関連する問題