小编Orc*_*lev的帖子

如何删除反应性香蕉中的重复事件

在反应性香蕉中,我有一个产生一系列数字的事件流,其中一些数字连续重复几次(我不关心所有重复数据,只关注连续重复数据).如何修改该事件流以仅包含非连续重复项?

我尝试使用更改将其转换为行为,认为行为只会在事件是新数字时"更改",而是每次收到新的输入事件时行为都会触发更改事件.

haskell frp reactive-programming reactive-banana

7
推荐指数
1
解决办法
186
查看次数

使用镜头插入特定位置的列表

我正在尝试对包含元素列表的嵌套数据结构进行操作.在用各种方法解决之后,我终于决定使用镜头作为最好的方法.它们完美地用于查找和修改结构的特定元素,但到目前为止,我对如何添加新元素感到困惑.

从我读过的内容来看,我无法在技术上使用Traversal,因为它违反了Traversal定律,将新元素插入到列表中,并且假设我甚至可以首先使用Traversal找出如何做到这一点(我对Haskell仍然相当弱,并且镜头包装中大多数东西的类型签名让我头晕目眩.

具体来说,我想要完成的是,在匹配特定选择器的元素列表中找到一些元素,然后在匹配元素之前或之后插入一个新元素(函数的不同参数在之前或之后)比赛).Control.Lens是否已经拥有可以完成我正在尝试做的事情,而且我对类型签名的理解太弱而无法看到它?有没有更好的方法来完成我想要做的事情?

如果我只是想在列表的开头或结尾添加一个新元素,那么这将是相当微不足道的,但是将它插入特定于中间的某个地方是困难的部分.在我编写的一些前镜头代码中,我使用折叠来完成我想要的东西,但它开始变得粗糙在结构的更深嵌套部分(EG折叠内部的折叠内部)所以我转向Control.Lens试图解开一些混乱.

haskell list lenses

6
推荐指数
2
解决办法
879
查看次数

如何在defaultLayout中嵌入BrowserID登录按钮

BrowserID的一部分优点是它只需要很少的网站基础设施,你只需嵌入一个带有一些javascript的按钮,然后设置一个回调路由来处理验证后的数据.我希望能够将BrowserID登录按钮嵌入defaultLayout模板内所有页面的顶部(然后根据登录状态有条件地显示/隐藏它),但我目前看不到这样做.Auth子网站的工作原理是将其"登录页面"嵌入defaultLayout模板中,但除此之外似乎是一个完整的黑盒子.

我真的希望能够避免滚动我自己的BrowserID登录处理程序或将用户重定向到一个完全独立的页面,如果可能的话,它只有一个BrowserID登录按钮.

有没有办法完成我想要做的事情,我只是缺少,或者我最好打赌我自己的BrowserID登录代码?

查看Yesod.Auth.BrowserId模块的源代码,看起来我可以做类似的事情:

(apLogin authBrowserId) <not sure what would go here>
Run Code Online (Sandbox Code Playgroud)

为了获得登录小部件,但劫持插件的胆量就像感觉脏了.

authentication haskell yesod browserid

5
推荐指数
1
解决办法
135
查看次数

onErrorResume无法正常工作

我正在尝试使用WebFlux,但看到的是我不太了解的行为,我怀疑这是WebFlux或Reactor中的错误,但我需要确认。

我试图创建一个最小可重现的案例,该案例由一个非常简单的HandlerFunction 组成,该函数尝试返回200响应,但是在主体创建过程中引发异常,然后尝试使用onErrorResume代替返回404响应。

该处理程序如下所示:

public Mono<ServerResponse> reproduce(ServerRequest request){
        return ServerResponse.ok()
        .contentType(APPLICATION_JSON)
        .body(Mono.fromCallable(this::trigger),String.class)
        .onErrorResume(MinimalExampleException.class,e->ServerResponse.notFound().build());
}
Run Code Online (Sandbox Code Playgroud)

我希望在调用关联的端点时得到404响应。相反,我看到的是带有日志消息的500响应,表明Spring认为在请求处理期间存在未处理的异常。

当我在onErrorResume内部断点时,我看到有两个处理程序正在注册,一个是我在上述方法中注册的,另一个是Spring(在之中RouterFunctions.toHttpHandler)为的实例注册的ResponseStatusException。然后,在处理请求期间,我仅看到第二个处理程序(由Spring注册的处理程序)被调用,与抛出的异常不匹配,然后进入根级处理程序。

据我所知,Spring正在路由器级别覆盖onErrorResume,从而阻止了我在Handler中注册的那个错误。这是预期的行为吗?有没有更好的方法来完成我正在尝试的工作?

java spring project-reactor spring-webflux

5
推荐指数
1
解决办法
3269
查看次数