【发布时间】:2017-05-17 00:05:54
【问题描述】:
const x = (a) => b(a) 和const x = b 是一回事
const a = () => { console.log('hi'); }
let x1 = a;
let x2 = () => a();
x1();
x2();
两者有什么区别..
const equalField = R.propEq('field'); // NOT WORK!
和
const equalField = (f) => R.propEq('field')(f); // WORKS!
第一个返回函数,第二个返回结果。
检查我的代码 sn-p...
const addingError = {
message: '',
errors: [ { field: "number" }, { field: "mac" } ]
}
// const equalField = R.propEq('field'); // NOT WORK!
const equalField = (f) => R.propEq('field')(f); // WORKS!
const getErrors = R.pipe(R.always(addingError), R.prop('errors'))
const anyField = R.converge(R.any, [equalField, getErrors])
const result = anyField('mac');
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.23.0/ramda.js"></script>
我的意图是……
当我打电话给anyField('mac')时
R.any 将被调用为R.any(equalField('mac'), getErrors('mac'))
-
equalField('mac')返回一个函数,这没关系,因为R.any的第一个参数是一个函数 -
getErrors('mac')返回一个数组,这没关系,因为R.any的第二个参数是一个数组。
【问题讨论】:
-
@Xufox,
R.propEq是咖喱。R.propEq('a', 'b')与R.propEq('a')('b')相同,正如您在我的问题中看到的那样。 -
这真的取决于
R.propEq到底是什么,以及你所说的“不起作用”到底是什么意思。您已经编辑了您的问题,但现在您的工作行在两个代码示例中不一致。哪一个真的不行?以及如何? -
我从未见过
R.propEq像你所说的“不工作”那样使用 - 也许这就是它不起作用的原因,因为它不应该那样使用 -
另外,它“不工作”是什么意思,有错误吗?还是您尝试错误地使用
equalField? -
The first one return a function是的,它会,当然会,因为它会
标签: javascript functional-programming ramda.js