我已经在一个名为Ramda的Javascript FP库上工作了一段时间,我在命名方面遇到了一些问题.(你听说过这条旧线,对吗?"计算机科学只有两个难题:缓存失效,命名事物和一个一个错误.")
在这个库中,(几乎)多个参数的每个函数都会自动计算.这适用于大多数用例.但是有一些问题是一些函数是非交换二元运算符.问题在于,英语名称往往意味着与应用currying时所发生的不同.例如,
var div10 = divide(10);
Run Code Online (Sandbox Code Playgroud)
听起来它应该是一个将其参数除以10的函数.但实际上它将其参数分为 10,如果你看一下这个定义就很清楚了:
var divide = curry(function(a, b) {
return a / b;
});
Run Code Online (Sandbox Code Playgroud)
所以相反的预期:
div10(50); //=> 5 // NO!!
Run Code Online (Sandbox Code Playgroud)
事实上,你得到了
div10(50); //=> 0.2 // Correct, but surprising!
Run Code Online (Sandbox Code Playgroud)
我们通过记录从人们的预期可能的差别,并创建处理这个问题divideBy,这只是flip(divide)和subtractN,这是flip(subtract).但是我们还没有找到一个很好的等价函数,例如lt:
R.lt = curry(function(a, b) {
return a < b;
});
Run Code Online (Sandbox Code Playgroud)
或它的表兄弟lte,gt和gte.
我自己的直觉就是这样
map(lt(5), [8, 6, 7, 5, 3, 0, 9]);
//=> [false, false, false, false, …Run Code Online (Sandbox Code Playgroud) var add = function(a, b) {
return a + b;
}
var addOne =add.bind(null,1);
var result = addOne(4);
console.log(result);
Run Code Online (Sandbox Code Playgroud)
这里a的绑定值为1,b为4。
如何在不使用扩展运算符的情况下将绑定值 ie)1 分配给函数的第二个参数(...)