[英]turn function into ramda pipe/compose
我想把这个 function:
const get1 = (v, d) => path(split(/[[\].]/, d), v);
get1("a.d", {a:{d:"f"}})
进入 pipe 或撰写 function 而无需像这样使用它:
get1("a.d")({a:{d:"f"}})
我想我很好奇为什么有两个问题。 首先, fn (a) (b)
有什么问题吗? 我个人发现,即使我不必这样做,我现在也首先倾向于这样做。 仅仅是个人喜好还是有更深层次的东西?
第二,为什么要重写一个完全可读的 function 来使用pipe
/ compose
? 我是 Ramda 的创始人之一,我喜欢这个库,但我当然不认为有必要让一切都变得无意义。
至于how ,Hitmands 已经给出了合理的答案,使用了 Ramda 有点奇怪的useWith
。 另一种方法是pipe
/ compose
并将结果提供给uncurryN
:
const get2 = uncurryN (2, pipe (split (/[[\].]/), path)) console.log (get2 ("ad", {a: {d: "f"}}))
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.27.1/ramda.js"></script> <script> const {uncurryN, pipe, split, path} = R </script>
但是这两个答案中的任何一个似乎都比原来的可读性差。
这应该有助于:
const fn = R.useWith(R.path, [R.split('.'), R.identity]); console.log( fn("ad")({ a: { d: 'f' } }), //curried call ); console.log( fn("ad", { a: { d: 'f' } }), //call with two arguments );
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.27.1/ramda.js" integrity="sha512-3sdB9mAxNh2MIo6YkY05uY1qjkywAlDfCf5u1cSotv6k9CZUSyHVf4BJSpTYgla+YHLaHG8LUpqV7MHctlYzlw==" crossorigin="anonymous"></script>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.