js,我正在尝试通过在我的代码中零碎地使用它来学习它。
我试图解决的问题是检查一个对象是否为空。如果为空则返回一个空白对象,否则返回原始对象。
到目前为止编写的代码:
R.ifElse(isEmptyObj, R.always({}), R.always)({a:1})
现在的问题是如果isEmpty返回true,那么R.always返回一个返回{}的函数。但是然后 isEmpty 为 false 我们想要返回传递给函数的相同对象,因此 R. 总是使用该对象执行,因此我们得到一个函数作为输出。
所以,在一种情况下我得到一个对象,而在另一种情况下我得到一个函数。
当 R.always
第一次被一个值调用时(我们称之为 X),它返回一个第二个函数,该函数总是返回第一个函数用 (X) 调用的值。由于您调用 R.always
时没有先使用参数调用它,因此您得到的结果是第二个函数。
在这种情况下,您希望将原始值传递给 R.ifElse
,因此使用 R.identity
:
const { ifElse, isNil, always, identity } = R
const fn = ifElse(isNil, always({}), identity)
console.log(fn({a:1})) // {a:1}
console.log(fn(null)) // {}
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.27.1/ramda.min.js" integrity="sha512-rZHvUXcc1zWKsxm7rJ8lVQuIr1oOmm7cShlvpV0gWf0RvbcJN6x96al/Rp2L2BI4a4ZkT2/YfVe/8YvB2UHzQw==" crossorigin="anonymous"></script>