gpt4 book ai didi

functional-programming - 如何在 Elm 0.15 中获得 keepWhen 行为?

转载 作者:行者123 更新时间:2023-12-05 00:22:27 24 4
gpt4 key购买 nike

keepWhen删除了早期版本的 Elm 中的功能。我已经从 0.14 移植了一个 Elm 应用程序,但我一直在试图让它的一部分工作,它正在使用 keepWhen .

所以基本上我正在寻找一个像

keepWhen : Signal Bool -> a -> Signal a -> Signal a

我已经找到
filter : (a -> Bool) -> a -> Signal a -> Signal a

但它并不完全相同,我还没有弄清楚如何让它工作。

最佳答案

答:从实用程序包中导入

最简单的方法是使用 Signal.Extra.keepWhen 来自 signal-extra包裹。
(完全披露:我是作者)

重要的实现细节

请注意,实现并非完全微不足道。这是包中的实现(Signal 模块导入不合格):

keepWhen : Signal Bool -> a -> Signal a -> Signal a
keepWhen boolSig a aSig =
zip boolSig aSig
|> sampleOn aSig
|> keepIf fst (True, a)
|> map snd

kqr's answer 中版本的重要区别是 sampleOn保留 keepWhen 的输出当 bool 输入更改时更新。两个过滤器的区别在于 keepWhen从 0.14 开始只过滤来自 a 的更新事件。输入,当 bool 输入变为 True 时不对其进行采样.

另一个实现也在signal-extra 中,名称为 sampleWhen 。 .

图表

如果你对大理石图有一点了解,也许 these old diagrams可能会有所帮助。我将在下面发布相关截图。

您阅读这些图表的方式:
  • 时间从左向右流动。
  • 一条线就是一个信号。
  • 该 block 是一个函数,它接受上面的两个信号并产生下面的信号。
  • 每行左边的形状是初始值。
  • 填充形状是信号上的事件。
  • 轮廓形状适用于信号不改变的情况。
  • 我用形状来表示类型。
  • 我使用颜色来表示不同的值。

  • keepWhen and older keepWhen+sample marble diagrams

    请注意,标记为旧行为的第二个图表与 kqr 答案中的代码行为相匹配。

    关于functional-programming - 如何在 Elm 0.15 中获得 keepWhen 行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29870883/

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