如何使用具有两个以上功能的 Ramda compose?
How to use Ramda compose with more than two functions?
这是我第一次尝试使用 Ramda 进行函数式编程。我正在尝试通过组合多个函数来构建 api 端点字符串。
这个有效:
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://?SORT=DESC&PART=TRUE
而我想要
https://API.CONTENT.IO??sort=desc&part=true&query={ some: value, another: value}
我使用哪种链接和组合组合来获得上述结果?
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)
原来我没有正确使用 str
参数
Ramda 用户可能熟悉的一种变体是在匿名函数管道中编写:
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}
这样的免积分版本可能合你的口味,也可能不合你的口味,但这是一个有趣的选择。
这是我第一次尝试使用 Ramda 进行函数式编程。我正在尝试通过组合多个函数来构建 api 端点字符串。
这个有效:
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://?SORT=DESC&PART=TRUE
而我想要
https://API.CONTENT.IO??sort=desc&part=true&query={ some: value, another: value}
我使用哪种链接和组合组合来获得上述结果?
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)
原来我没有正确使用 str
参数
Ramda 用户可能熟悉的一种变体是在匿名函数管道中编写:
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}
这样的免积分版本可能合你的口味,也可能不合你的口味,但这是一个有趣的选择。