gpt4 book ai didi

haskell - react 性香蕉节流事件

转载 作者:行者123 更新时间:2023-12-04 12:35:17 27 4
gpt4 key购买 nike

我想在 react 香蕉中实现某种类型的事件限制。它应该这样工作,如果从最后一个通过的事件到达的时间少于 delta 秒,则不会让事件通过。如果它没有通过,那么它会被存储并在最后一次触发事件的 delta 秒后触发。

下面是一个为时间戳数字列表实现此功能的程序。有没有可能把它翻译成 reactive-banana ?

另外,在 react 香蕉中,我如何在其他事件出现后 x 秒触发一个事件?

模块主要在哪里

导入数据列表

-- 1 秒节流
-- 逻辑是在输出最后一个值后 1 秒之前永远不会输出一个值。

主要::IO()
主要 = 打印 $ 测试 [ (0.0, 1.0), (1.1, 2.0), (1.5,3.0), (1.7,4.0), (2.2, 5.0) ]
--应该输出 [ (0.0, 1.0), (1.1, 2.0), (2.1,4.0), (3.1, 5.0) ]

测试::[(Double,Double)] -> [(Double,Double)]
测试列表 = g v (concat xs)
在哪里
(v, xs) = mapAccumL f (-50,Nothing) 列表
g (t, Just x) ys = ys++ [ (t+1,x) ]
g _ ys = ys
f (lasttime, Just holdvalue) (t,x) = if t > (lasttime+1) then
如果 t > (lasttime + 2) 那么
( (t, Nothing), [ (lasttime+1,holdvalue), (t,x)] )
else ( (lasttime+1, Just x) , [ (lasttime+1,holdvalue) ] )
别的
((上次,只是 x),[])
f (lasttime, Nothing) (t,x) = 如果 t > (lasttime+1) 那么
( (t,Nothing) , [ (t, x ) ] )
else ( (lasttime, Just x), [] )

最佳答案

从 reactive-banana-0.6 开始,绝对可以实现您想要的功能,但它有点复杂。

基本上,您已经使用 wxHaskell 之类的外部框架来创建一个计时器,然后您可以使用它来安排事件。 Wave.hs示例演示了如何做到这一点。

目前,我选择不在响应式香蕉库本身中包含时间概念。原因很简单,不同的外部框架具有不同分辨率或质量的计时器,没有一种尺寸适合所有情况。

我确实打算向库本身添加处理时间和计时器的通用帮助函数,但我仍然需要找到一种好方法让它在不同的计时器上通用,并弄清楚我可以提供哪些保证。

关于haskell - react 性香蕉节流事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10888826/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com