Ramda.js 为什么R.all和R.both不等于R.allPass和相同的参数?

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

我只是边做ramda.js边学习。嗯,有很多方法可以和拉姆达达成目标,但有一件事我不明白

我想检查输入的字符串数组是否都匹配一个正则表达式。我以为我可以做到
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
需要一组谓词函数和一组值来测试。