Ramda.js 为什么R.all和R.both不等于R.allPass和相同的参数?
我只是边做ramda.js边学习。嗯,有很多方法可以和拉姆达达成目标,但有一件事我不明白 我想检查输入的字符串数组是否都匹配一个正则表达式。我以为我可以做到Ramda.js 为什么R.all和R.both不等于R.allPass和相同的参数?,ramda.js,Ramda.js,我只是边做ramda.js边学习。嗯,有很多方法可以和拉姆达达成目标,但有一件事我不明白 我想检查输入的字符串数组是否都匹配一个正则表达式。我以为我可以做到R.all(R.both(isString,isRegExp)),但当输入是一个数字时,它似乎提供了一个true。 正如预期的那样,R.allPass([isString,isRegExp])给出一个带有数字输入的false 但谁能解释一下为什么R.all返回一个真值?或者(思考中)错误在哪里 完整代码: var isString = R.i
R.all(R.both(isString,isRegExp))
,但当输入是一个数字时,它似乎提供了一个true
。
正如预期的那样,R.allPass([isString,isRegExp])
给出一个带有数字输入的false
但谁能解释一下为什么R.all返回一个真值?或者(思考中)错误在哪里
完整代码:
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
// }
附言:
我知道我可以只用regexp来缩短条件,但是在其他情况下,我需要两个条件都为真。例如isArrayOfNumber和sumOfNumbersOver50。R.all的第二个参数要求测试一系列值。由于函数的实现方式,它将示例中的
9
视为一个空列表,从而产生一个true
的值,因此R.all
和R.allPass
之间的区别在于R.all
确实需要一个数组(如对象)作为结果函数中的参数,而R.allPass
不。好的,谢谢!正确,R.all
需要一个谓词函数和一组值来测试,而R.allPass
需要一组谓词函数和一组值来测试。