为什么 R.all 与 R.both 不等于 R.allPass 具有相同的参数?
Why does R.all with R.both does not equal R.allPass with the same arguments?
我只是边做边学ramda.js。嗯,有很多方法可以用 ramda 达到目标,但有一点我不明白。
我想检查一组字符串的输入,这些字符串都匹配一个正则表达式。我以为我可以做到 R.all(R.both(isString, isRegExp))
,但当输入是数字时它似乎提供了 true
。
正如预期的那样,R.allPass([isString, isRegExp])
给出了带有数字输入的 false
。
但是谁能解释一下为什么 R.all 返回的是 true?或者(思考中)错误的地方是什么?
完整代码:
var isString = R.is(String),
isMyRegExp = R.test(/^[a-z]+$/),
isMyRegExpString = R.both(isString, isMyRegExp),
isArrayOfMyRegExpStrings = R.all(isMyRegExpString),
isArrayOfMyRegExpStringsPass = R.allPass([isString, isMyRegExp]),
result = {
'all': isArrayOfMyRegExpStrings(9),
'allPass': isArrayOfMyRegExpStringsPass(9)
};
console.log(result);
// {
// all: true,
// allPass: false
// }
https://codepen.io/Eisenhardt/pen/PKLZqj
PS:
我知道我可以只用正则表达式来缩短条件,但在其他情况下我需要两个条件都为真。例如。 isArrayOfNumber 和 sumOfNumbersOver50。
R.all
的第二个参数需要要测试的值列表。由于该函数的实现方式,它将您示例中的 9
视为一个空列表,导致 vacuous truth 并评估为 true
.
我只是边做边学ramda.js。嗯,有很多方法可以用 ramda 达到目标,但有一点我不明白。
我想检查一组字符串的输入,这些字符串都匹配一个正则表达式。我以为我可以做到 R.all(R.both(isString, isRegExp))
,但当输入是数字时它似乎提供了 true
。
正如预期的那样,R.allPass([isString, isRegExp])
给出了带有数字输入的 false
。
但是谁能解释一下为什么 R.all 返回的是 true?或者(思考中)错误的地方是什么?
完整代码:
var isString = R.is(String),
isMyRegExp = R.test(/^[a-z]+$/),
isMyRegExpString = R.both(isString, isMyRegExp),
isArrayOfMyRegExpStrings = R.all(isMyRegExpString),
isArrayOfMyRegExpStringsPass = R.allPass([isString, isMyRegExp]),
result = {
'all': isArrayOfMyRegExpStrings(9),
'allPass': isArrayOfMyRegExpStringsPass(9)
};
console.log(result);
// {
// all: true,
// allPass: false
// }
https://codepen.io/Eisenhardt/pen/PKLZqj
PS: 我知道我可以只用正则表达式来缩短条件,但在其他情况下我需要两个条件都为真。例如。 isArrayOfNumber 和 sumOfNumbersOver50。
R.all
的第二个参数需要要测试的值列表。由于该函数的实现方式,它将您示例中的 9
视为一个空列表,导致 vacuous truth 并评估为 true
.