Ramda:最后传递谓词相等参数
Ramda: pass predicate equality argument last
我有一个静态集合。我想每次都按值检查任何匹配项,值已更改。
现在我有:
var isOk = R.any(item => item.test(value), items);
我想要的:
将函数存储在其他地方并像这样调用它:
var isOk = checkMatch(value);
有什么想法吗?谢谢
更新
我正在寻找 Ramda 方式的解决方案。调用顺序为 R.__
的东西
将其包装在一个需要 value
.
的闭包中
var isOk = (value) => R.any(item => item.test(value), items);
var isOk_foobar = isOk('foobar');
我不确定你的测试项是正则表达式
字符串,但如果是,您可以尝试这样的操作:
const anyMatch = curry((regexes, val) => any(regex => test(regex, val), regexes))
const testFiles = anyMatch([/test\/(.)+\.js/i, /\.spec\.js/i])
testFiles('foo.js') //=> false
testFiles('test/foo.js') //=> true
testFiles('foo.spec.js') //=> true
这对我来说看起来很干净,非常符合 Ramda 的精神。如果你想让它免分,你可以这样做:
const anyMatch = useWith(flip(any), [identity, flip(test)])
但我发现它的可读性要差得多。对我来说,point-free 是一种在提高可读性时值得使用的工具,在提高可读性时避免使用。
您可以在 Ramda REPL.
上看到实际效果
我有一个静态集合。我想每次都按值检查任何匹配项,值已更改。
现在我有:
var isOk = R.any(item => item.test(value), items);
我想要的:
将函数存储在其他地方并像这样调用它:
var isOk = checkMatch(value);
有什么想法吗?谢谢
更新 我正在寻找 Ramda 方式的解决方案。调用顺序为 R.__
的东西将其包装在一个需要 value
.
var isOk = (value) => R.any(item => item.test(value), items);
var isOk_foobar = isOk('foobar');
我不确定你的测试项是正则表达式 字符串,但如果是,您可以尝试这样的操作:
const anyMatch = curry((regexes, val) => any(regex => test(regex, val), regexes))
const testFiles = anyMatch([/test\/(.)+\.js/i, /\.spec\.js/i])
testFiles('foo.js') //=> false
testFiles('test/foo.js') //=> true
testFiles('foo.spec.js') //=> true
这对我来说看起来很干净,非常符合 Ramda 的精神。如果你想让它免分,你可以这样做:
const anyMatch = useWith(flip(any), [identity, flip(test)])
但我发现它的可读性要差得多。对我来说,point-free 是一种在提高可读性时值得使用的工具,在提高可读性时避免使用。
您可以在 Ramda REPL.
上看到实际效果