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.

上看到实际效果