- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
所有示例都使用 Ramda
作为 _
(很清楚示例上下文中的方法做什么)和 kefir
作为 frp
(与 bacon.js 中的 API 几乎相同)
我有一个流,它描述了位置的变化。
var xDelta = frp
.merge([
up.map(_.multiply(1)),
down.map(_.multiply(-1))
])
.sampledBy(frp.interval(10, 0))
.filter();
当我按下 UP
键时,它会发出 +1
,而当我按下 DOWN
时,它会发出 -1
。
为了获得位置,我扫描
这个增量
var x = xDelta
.scan(_.add)
.toProperty(0);
这是预期的工作。但我想将 x
的值从 0
限制到 1000
。
为了解决这个问题,我找到了两个解决方案:
在scan
中改变函数
var x = xDelta.scan(function (prev, next) {
var newPosition = prev + next;
if (newPosition < 0 && next < 0) {
return prev;
}
if (newPosition > 1000 && next > 0) {
return prev;
}
return newPosition;
}, 0);
看起来还可以,但是以后随着新规则的出台,这个方法会越来越多。所以我的意思是它看起来不可组合和 FRPy。
我有当前
职位。和 delta
。我想将 delta
应用于 current
,前提是 current after applying
不会超出限制。
current
取决于 delta
delta
取决于 current after applying
current after applying
取决于current
所以看起来像循环依赖。但我使用 flatMap
解决了它。
var xDelta = frp
.merge([
up.map(_.multiply(1)),
down.map(_.multiply(-1))
])
.sampledBy(frp.interval(10, 0))
.filter();
var possibleNewPlace = xDelta
.flatMap(function (delta) {
return x
.take(1)
.map(_.add(delta));
});
var outOfLeftBoundFilter = possibleNewPlace
.map(_.lte(0))
.combine(xDelta.map(_.lte(0)), _.or);
var outOfRightBoundFilter = possibleNewPlace
.map(_.gte(1000))
.combine(xDelta.map(_.gte(0)), _.or);
var outOfBoundFilter = frp
.combine([
outOfLeftBoundFilter,
outOfRightBoundFilter
], _.and);
var x = xDelta
.filterBy(outOfBoundFilter)
.scan(_.add)
.toProperty(0);
您可以在 iofjuupasli/capture-the-sheep-frp 查看完整的代码示例
它正在运行演示 gh-pages
它有效,但使用循环依赖可能是反模式。
有没有更好的办法解决FRP中的循环依赖?
使用 Controller
可以从两个 Model
中读取一些值,并根据它的值更新它们。
所以依赖看起来像:
---> Model
Controller ---|
---> Model
对于 FRP,没有 Controller
。因此,Model
值应该根据其他 Model
以声明方式计算。但是如果 Model1
从另一个相同的 Model2
计算,那么 Model2
从 Model1
计算呢?
Model ----->
<----- Model
例如两个具有碰撞检测的玩家:两个玩家都有position
和movement
。而第一个玩家的移动
取决于第二个玩家的位置
,反之亦然。
我在这方面还是个新手。经过多年的命令式编码,开始以声明式 FRP 风格思考并不容易。可能我遗漏了什么。
最佳答案
using circular dependencies is probably anti-pattern
是也不是。从你实现它时遇到的困难,你可以看出很难创建循环依赖。特别是以声明的方式。但是,如果我们想使用纯声明式风格,我们可以看到循环依赖是无效的。例如。在 Haskell 中你可以声明 let x = x + 1
- 但它会评估为异常。
current
depends ondelta
,delta
depends oncurrent after applying
,current after applying
depends oncurrent
如果你仔细观察,它不会。如果这是一个真正的循环依赖,current
从来没有任何值(value)。或者 threw an exception .
相反,current
确实取决于它之前的状态。这是 FRP 中众所周知的模式,即 stepper。取自this answer :
e = ((+) <$> b) <@> einput
b = stepper 0 e
不知道是什么<$>
和 <@>
确实如此,你大概可以说出事件是如何发生的e
和行为(“属性(property)”)b
取决于事件einput
.更好的是,我们可以声明性地扩展它们:
e = ((+) <$> bound) <@> einput
bound = (min 0) <$> (max 1000) <$> b
b = stepper 0 e
培根在 scan
中基本上就是这么做的.不幸的是,它迫使您在一个回调函数中完成所有这些。
我还没有看到 stepper
在任何 JS FRP 库中运行1。在培根和开菲尔中,您可能必须使用 Bus
如果你想实现这个模式。 我很高兴被证明是错误的:-)
[1]:好吧,除了我自己实现的那个(它还不能展示)。但是使用 Stepper
仍然感觉像在跳圈,因为 JavaScript 不支持递归声明。
关于javascript - FRP 中 EventStreams 的循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29478305/
我在 gobject 上阅读了一个维基百科页面,上面写着, Depending only on GLib and libc, GObject is a cornerstone of GNOME and
如何注册一个依赖属性,其值是使用另一个依赖属性的值计算的? 由于 .NET 属性包装器在运行时被 WPF 绕过,因此不应在 getter 和 setter 中包含逻辑。解决方案通常是使用 Proper
我一直在尝试将 ActionbarSherlock maven 依赖项添加到我的项目中 com.actionbarsherlock library 4.2.0 在我的 po
http://tutorials.jenkov.com/ood/understanding-dependencies.html#whatis说(强调我的): Whenever a class A us
我对所有这些魔法有点不清楚。 据我了解,依赖属性是从 DependencyObject 继承的,因此存储值: 如果分配了值(在本地字典中),则在实例本身中 或者如果未指定值,则从指向父元素的链接中获取
我刚刚更新了在 ASP.NET Framework 4.5.2 版上运行的 MVC Web 应用程序。我正在使用 Twilio 发送 SMS 消息: var twilio = new TwilioRe
我刚刚发现了一件令人生畏的事情。 spring 依赖坐标有两个版本。 项目依赖于 spring mvc 和 spring flow。有两组并行的依赖项。 Spring MVC 具有以下方案的依赖项
我正在尝试包含 的 maven 依赖项 org.jacorb jacorb 2.3.1 依赖已解决,但它导致另一个依赖 picocontainer 出现问题: [ERROR
我正在尝试在 Haskell 项目中包含特定版本的库。该库是住宿加早餐型的(用于 martix 操作),但我需要特定的 0.4.3 版本,该版本修复了乘法实现的错误。 所以,我的 stack.yaml
有谁知道如何制作依赖的 UIPickerView.例如,当我选择组件一的第 2 行时,组件二的标题会发生变化吗? 我在互联网上查找过,没有真正的答案,我尝试过使用 if 和 switch 语句,但它们
我正在编写一个用于验收测试的项目,由于各种原因,这依赖于另一个打包为 WAR 的项目。我已成功使用 maven-dependency-plugin 解压 WAR,但无法让我的项目包含解压的 WEB-I
或多或少我在 session 上大量构建我的网站(特别是重定向用户等),我很好奇这是否是一种危险的做法。禁用浏览器 cookie 保存的用户的大致比例是多少?我愿意接受任何建议:) 谢谢 最佳答案 s
开始玩 Scala futures,我被依赖的 futures 困住了。 让我们举个例子。我搜索地点并获得 Future[Seq[Place]]。对于这些地点中的每一个,我搜索最近的地铁站(该服务返回
或多或少我在 session 上大量构建我的网站(特别是重定向用户等),我很好奇这是否是一种危险的做法。禁用浏览器 cookie 保存的用户的大致比例是多少?我愿意接受任何建议:) 谢谢 最佳答案 s
我有一个二进制文件,需要一些 *.so 文件才能执行。现在,当我尝试在一些旧机器上执行它时,它会显示 /lib/libc.so.6: version `GLIBC_2.4' not found 如何将
我尝试使用 Dygraph 来表示图表,我在 https://github.com/danvk/dygraphs 中找到了代码,但是它有太多的依赖文件,我觉得很烦人。是否有一个文件可以容纳所有必需的
我正在处理一个 javascript 文件,该文件 a) 声明一个具有函数的对象,并且 b) 使用它期望在外部声明的散列调用该对象的 init 函数。我的 Jasmine 规范提示它找不到哈希,因为它
最近我一直在学习 Angular 并且进展顺利,但是关于依赖注入(inject)的一些事情我仍然不清楚。 是否有任何理由在我的 app.js 文件中声明我的应用程序的其他部分(服务、 Controll
考虑一个名为 foo 的表,它有 id (PRIMARY & AUTO_INCREMENT) 列。我正在向该表中插入一行,挑战从此时开始。 $db->query("INSERT INTO `foo`
我正在使用级联下拉 jquery 插件。 (https://github.com/dnasir/jquery-cascading-dropdown) 我有两个下拉菜单。 “客户端”和“站点”。 根据您
我是一名优秀的程序员,十分优秀!