[英]How can I reuse function chains in Javascript?
我正在使用函数库( Gremlin )来查询图形数据库。 调用它看起来像这样:
g.V().has(...).out(...).hasLabel(...).in(...).next();
我的一些功能链非常长,我希望能够将它们的一部分用于干燥目的。 例如:
const postProjection = () => (
project("id", "title")
.by(__.id())
.by("title")
)
g.V().hasLabel("post").postProjection().next()
我知道这不起作用但这就是概念。 我想将这个链的一部分封装到一个函数中,我可以(以某种方式)从需要的库中注入各种其他函数链。 通过使用可重用段动态构建这些调用,我可以大大减少重复次数。
这可能吗?
如果你想用你的确切语法来调用它,你必须使用类似这样的答案将函数添加到Vertex
(或其他)原型。 但是,这有点冗长,而不是解决类似问题的预期方法。 我建议将它作为常规函数调用,除了需要参数之外,现有的解决方案非常接近:
const postProjection = (vs) => (
vs
.project("id", "title")
.by(__.id())
.by("title")
)
const vs = g.V().hasLabel("post")
postProjection(vs).next()
也许你可以使用一个实现functor的类型,并允许你调用内部对象的方法:
const foo = i => (console.log(i), {foo, i}); const Box = o => ({ map: f => Box(f(o)), run: (k, ...args) => Box(o[k] (...args)), get: o }); const fun1 = o => o.foo(3).foo(4) const fun2 = o => o.foo(7).foo(8); console.log( Box(foo(1).foo(2)) .map(fun1) // lift normal function into the type .run("foo", 5) .run("foo", 6) .map(fun2) .run("foo", 9) .get // escape from the type .foo(10));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.