我有一系列函数,它们接收请求对象并返回Vavr。
如果任务已完成,则要么将包含一个Result对象,如果任务需要由另一个函数完成,则将包含一个修改后的Request对象。
我的想法是,我可以通过做这样的事情把它们联系在一起:
// Note: The Request object parameter is modified by the function
// before being returned in the Either.
Function<Request, Either<Request,Result>> function1;
Function<Request, Either<Request,Result>> function2;
Function<Request, Either<Request,Result>> function3;
Function<Request, Result> terminalFunction;
Result result = function1.apply(request)
.flatMapLeft(function2)
.flatMapLeft(function3)
.fold(terminalFunction, r->r);
但是很明显faceMap↓
不是一个东西,所以我最终在左侧有一个嵌套的Eithers。关于如何实现此功能有什么想法吗?我对替代库持开放态度。
编辑:
Result result = function1.apply(request)
.fold(function2, Either::right)
.fold(function3, Either::right)
.fold(terminalFunction, r->r);
看起来应该这样做,但Intellij在第二行给出了这个错误:
no instance(s) of type variable(s) exist so that capture of ? extends Object conforms to Request
Result result = function1.apply(request)
.fold(function2, Either::<Request, Result>right)
.fold(function3, Either::<Request, Result>right)
.fold(terminalFunction, r->r);
这似乎是有效的,尽管它有点笨拙。这是对图书馆的滥用吗?会有兴趣听到一些替代方法。
您的请求
侧需要一元合成,这是您的类型签名的左侧,但您的右侧有一元合成。因此,您需要在函数定义中交换eithers,或者您必须通过传递它们。swap()
与
Function1.of(SomeType::function1).andThen(Either::swap)
本质上,您的每个函数[1-3]
都会变成类型:
Function<Request, Either<Result, Request>>
然后您的呼叫链变成:
Result result = function1.apply(request)
.flatMap(function2)
.flatMap(function3)
.swap()
.getOrElseGet(terminalFunction);
我有方法: 我想返回列表和HTTP状态或TaskError。TASKS\u LIST\u NOT\u FOUND和HTTP状态,但由于两者之一,Json中还有其他内容,如“right”等。 解决方案(感谢@chrylis-谨慎光学)
问题内容: 我已经使用延迟模块在Node.js中创建了我的第一个延迟对象,当我将结果传递给下一个函数并触发解析和拒绝时,它的效果很好。当每个函数返回deferred.promise时如何链式执行函数数组?我有函数的输入参数数组和第一个函数的输入参数,每个下一个函数都从上一个获取参数。 它的工作方式类似于,但是当我有n个函数时该如何工作。 问题答案: 您需要在循环中构建一个Promise链:
我有一个函数,当某些条件不满足时,它应该不返回任何内容(void)或字符串。 我也试过这句话。左(无效)
问题内容: 我正在使用Postgresql 8.3,并具有以下简单功能,该功能会将a返回 给客户端 现在,我可以使用以下SQL命令来调用此函数并操纵返回的游标,但是游标名称是由PostgreSQL自动生成的 此外,如38.7.3.5中所述,显式地将游标名称声明为函数的输入参数 。返回游标。我可以声明自己的游标名称并使用此游标名称来操纵返回的游标,而不是为我自动生成的Postgresql吗?如果不是
问题内容: 我想编写一个脚本来测试所有链接的服务器,并返回唯一已连接的服务器(可以肯定只有一个)。 这是我当前的脚本,但是我被困在这一点上: 但是使用此查询,代码无法在第一次迭代时停止,因为它无法连接到表的第一台服务器。这是错误消息: 链接服务器“ server1”的OLE DB提供程序“ MSDASQL”返回了消息“通信链接失败; -10709连接失败(连接超时已过期)”。消息7303,级别16
函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回。 我们来实现一个可变参数的求和。通常情况下,求和的函数是这样定义的: def calc_sum(*args): ax = 0 for n in args: ax = ax + n return ax 但是,如果不需要立刻求和,而是在后面的代码中,根据需要再计算怎么办?可以不返回