使用Scala RX中的FRP管理资源
发布时间:2020-12-16 18:28:22 所属栏目:安全 来源:网络整理
导读:我正在使用 scala rx进行应用程序.我有一个持有文件的反应变量(这是一个PDF文件).我正在使用库将此pdf文件中的页面呈现到屏幕上.现在我正在使用的PDF库给了我一个对象(让我们称之为Doc),我可以使用它来渲染单个页面.但是,为了从Doc对象呈现页面,必须打开Doc
我正在使用
scala rx进行应用程序.我有一个持有文件的反应变量(这是一个PDF文件).我正在使用库将此pdf文件中的页面呈现到屏幕上.现在我正在使用的PDF库给了我一个对象(让我们称之为Doc),我可以使用它来渲染单个页面.但是,为了从Doc对象呈现页面,必须打开Doc对象(因此必须获取资源).
现在我正在为我正在重新渲染的每个页面加载pdf文件(创建一个新的Doc对象并在渲染单个页面后关闭它).这使得页面的呈现起作用(给定文件和页码,返回图像). 有没有办法坚持打开资源并在FRP的变化中关闭它,特别是对于scala rx?如何处理这种非常常见的情况? 解决方法
您只需将Doc对象括起来即可.所以不是渲染存在
def render(file: File,pageNumber: Int): Image = // blah blah blah 将其更改为: def open(file: File): (Int => Image) = { val doc = // call your library to read file (x: Int) => doc.getPage(x) } 然后传递函数open返回到您正在响应的任何页面更改信号. 编辑:哦,我明白了,所以你说你希望它在文件时关闭文件:文件信号变为另一个文件.在这种情况下,您应该能够做到这样的事情: def pageGetterRx(file: Rx[File]): Rx[Int => Image] = { val doc: Var[Doc] = Var(null) val o = file.foreach { f => Option(doc()).foreach(_.close) doc() = PdfLib.read(f) // or however you do the reading } Rx { (x: Int) => doc().getPage(x) } } 编辑2:为了澄清,如果你在FRP上施加“在某些信号相位上运行网络的功能组合网络”,上述功能只会被调用一次;在组装阶段.换句话说,pageGetterRx(一个糟糕的名字,我完全知道)不参与FR方式,而是返回lambdas的信号,每个lambdas关闭一个特定文件并从中返回页面. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- 《数据结构》链表程序调试示例--有一定代表性请看
- scala – Spark 1.6:java.lang.IllegalArgument
- twitter-bootstrap – 如何用Bootstrap和Angular
- 为什么map和Set在scala.Predef中别名?
- angularjs – 在自定义指令中禁用ngClick事件处理
- Vim:有没有办法’隐藏’vim以查看底层shell?
- angularjs – 使用ng-Style更改背景颜色
- 访问服务器提示: connection refused:connect
- Bootstrap页面缩小变形的快速解决办法
- 编译错误:未找到:使用Scala时在Play框架中对no
热点阅读