问题标签 [frp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1273 浏览

objective-c - 在 dispatch_queue sendComplete 上创建的 RACSubject 不会使其成为合并信号

当在 DISPATCH_QUEUE_PRIORITY_DEFAULT gcd 队列上运行的 dispatch_async 块中时:我创建两个 RACSubject 对象,使用 RACSignal 合并:然后订阅完成。然后,出于此测试的目的(并在我的实际代码中复制该场景),我对它们都发送了 sendComplete。合并的信号完成订阅永远不会触发。我独立地为主题附加了两个完成订阅,它们确实会触发。如果我在主线程而不是 gcd 队列上进行相同的测试,那么它会按预期工作。

有没有办法完成这项工作,或者我是否必须重构才能将所有主题都放在主线程上?

0 投票
1 回答
346 浏览

haskell - 乒乓球,检测球是否出界

我正在写一个乒乓球游戏,我需要一些关于游戏逻辑的帮助。我的问题是我在检测球是否在地图外时遇到了麻烦,这导致球只是出界并且没有得分。目前它的工作原理是这样的:

常量的原因是游戏尺寸为 600x400,球宽 15 像素,位置在其核心。resetGame 是这样工作的:

但不知何故,这不起作用。球仍然在地图之外,比赛基本上被打破了。

所以,我的问题如下;我怎么能写这个,所以它基本上可以工作,所以当球出界时,游戏会重置并按预期给每个球员得分?完整的源代码在这里http://lpaste.net/91745,上面的代码在第 107 到 114 行定义,并在第 118 行使用。

我会很感激帮助,谢谢。

编辑:我在 stepScore 中尝试了不同的常量,而 stepScore 是问题所在,由于某种原因它不起作用。:(

0 投票
3 回答
1103 浏览

javascript - 用 FRP 管理状态

有人说 FRP 是关于在不显式管理状态的情况下处理事件流。这个人,例如:

http://www.slideshare.net/borgesleonardo/functional-reactive-programming-in-clojurescript

其他人则通过指出完全通过副作用进行编程的困难来激励 FRP,就像异步回调必须做的那样。

http://cs.brown.edu/~sk/Publications/Papers/Published/mgbcgbk-flapjax/

然而,在尝试使用 FRP(flapjax)时,我一直遇到同样的问题:无法通过副作用处理状态,除非明确表示。

例如,动画队列。更改到达事件流。当第一个变化到来时,我需要排队等待在未来某个时间发生的绘制(例如使用 window.requestAnimationFrame),并安排累积现在和未来绘制事件之间的变化。当绘制事件发生时,我需要绘制累积的变化。

这大约是六行代码,使用带有观察者模式的命令式样式,但我找不到在 FRP 中表达这一点的合理方法。唯一接近的是关闭共享状态上的相关事件流,并通过副作用显式管理状态和呈现事件。这几乎不是对命令式回调的改进。

这应该如何在 FRP 中处理?

这是一个用于关闭状态的flajax实用程序:

在这里,它用于动画循环:

注意事项:与等效的回调代码相比,它更大、可读性更差、可维护性更差。它仍然需要显式管理状态。它通过副作用起作用。

有没有更好的方法在 FRP 中做到这一点?不同的模式,还是不同的库?

0 投票
1 回答
484 浏览

frp - Elm.js "lift" 和 Bacon.map:它们在功能上是否相同?

我试图了解榆树。我对 Bacon.js 有一点经验,在我看来,lift 基本上是 Bacon.js 的内部 map() 函数重命名。

还有比这更多的吗?

0 投票
1 回答
263 浏览

signalr - Signalr - 将回调序列化为事件而不是函数调用?

在 Signalr 中,是否支持使用事件而不是回调。

在你拿起干草叉之前让我解释一下。

跟随这里的第一个例子

不会调用集线器代理的 addContosoChatMessageToPage(name, message),但会调度带有一些额外信息的 addContosoChatMessageToPage 事件。(不要求它是完全相同的 api 调用)

我问这一切的原因是因为

  1. 这与ELMbacon.js等功能性反应式编程框架一起工作得更好
  2. 我不想自己做这件事,本质上是创建自己的子框架。当然,我总是可以做 Clients.All.CreateEvent(name,params...) 我不断回调我的方法来创建这个事件
  3. 我实际上认为事件在某些情况下可以更好地分离关注点。

我疯了吗?这样的事情存在吗?

0 投票
1 回答
202 浏览

haskell - Netwire mutually dependant wires

To try out Netwire, I'm implementing Pong using the library. In the code I have a ball wire and a computer paddle wire, and since they depend on each other for some values I've been running into issues with infinite loops. Some pseudo-code to explain:

The thing to notice is they take each other for inputs. I've tried to alleviate this by doing the following:

and other variations of using the delay function in these two wires, but I'm getting the <<loop>> runtime error regardless.

How do I initialize one of the wires so that this system can work?

0 投票
1 回答
254 浏览

haskell - 如何使用函数响应式编程在每个时间步查询 URL?

我想知道,您将如何使用功能响应式编程编写一个程序,该程序每 x 个时间步从给定的 URL 检索一个 JSON 对象?

我正在研究 Elm 框架,但我对更通用的解决方案持开放态度。我有一个方法

即,它接受一个包裹在信号中的 HTTP 请求,并返回一个包裹在信号中的响应字符串。

现在,我有一个“下一个状态”函数,它接受输入信号并创建一个新的游戏状态。这些是使用 foldp 包裹起来的。输入信号之一是来自 HTTP 请求的响应。但是,当我运行它时,查询只运行一次,而不是每个时间步。我怎样才能解决这个问题?

编辑:这是我使用非 FRP(命令式)解决这个问题的方法:

即只是经常查询url,无限循环。

0 投票
1 回答
218 浏览

javascript - 是否有可能以某种方式“反复”限制培根的动作?

我正在使用 bacon.js 并且在某些情况下信号从两个来源发出:

sourceA被触发时,它应该触发一些repeatedly永久运行的动作,除非从sourceB. 所以在语法上它可能看起来像这样:

所以我基本上要求一个模拟takeWhiletakeUntil组合器,但在源代码或文档中找不到这样的功能。有什么想法吗?

如果有通用组合器就更好了

或者

在某些情况下终止任何培根事件流,我将如何实现这样的事情?

请注意,此解决方案如下:

限制派生流aAction,但不限制原始流。

0 投票
1 回答
293 浏览

javascript - Bacon.js 是否有一些组合器可以让您收集同时发出的两个事件?

正如标题所说,我正在寻找一些组合collect器,它将同时发出的事件收集到一个列表中,类似于 Reactive-Banana 中的那个。换句话说:

如果它不存在,我将如何实现它?仔细阅读源代码,我看不到某种方式来读取事件发生的“时间”,例如Bacon.Event类似乎没有记录自己发生的时间?我是否应该只使用 Javascript 的本机函数事后new Date().getTime()标记事件,并且断言在某个任意时间范围内发生的事件实际上是“同时发生的”。

0 投票
1 回答
1965 浏览

haskell - 在函数式反应式编程中,如何在应用程序的两个部分之间共享状态?

我有一些应用程序架构,其中用户输入流向一些自动机,它在事件流的上下文中运行并将用户引导到应用程序的不同部分。应用程序的每个部分都可以根据用户输入运行一些操作。但是,应用程序的两个部分共享一些状态,并且在概念上是读取和写入相同的状态。需要注意的是,两个“线程”没有同时运行,其中一个“暂停”,而另一个“产生”输出。描述这种状态共享计算的规范方法是什么,而不使用一些全局变量?两个“线程”保持通过某种形式的消息传递同步的本地状态是否有意义,即使它们无论如何都不是并发的?

由于问题更具概念性,因此没有代码示例,但欢迎使用 Haskell(使用任何 FRP 框架)或其他语言中的示例回答。