相关疑难解决方法(0)

什么是Scala延续以及为什么要使用它们?

我刚刚完成了Scala编程,我一直在研究Scala 2.7和2.8之间的变化.似乎最重要的一个是continuation插件,但我不明白它对它有用或它是如何工作的.我已经看到它对异步I/O很有用,但我还是找不到原因.关于这个主题的一些更受欢迎的资源是:

关于Stack Overflow的这个问题:

不幸的是,这些引用中没有一个试图定义什么是continuation或者shift/reset函数应该做什么,而且我没有找到任何引用.我无法猜测链接文章中的任何示例是如何工作的(或者他们做了什么),因此帮助我的一种方法可能是逐行浏览其中一个示例.即使是第三篇文章中的简单文章:

reset {
    ...
    shift { k: (Int=>Int) =>  // The continuation k will be the '_ + 1' below.
        k(7)
    } + 1
}
// Result: 8
Run Code Online (Sandbox Code Playgroud)

为什么结果是8?这可能会帮助我开始.

continuations scala scala-2.8 delimited-continuations

84
推荐指数
5
解决办法
2万
查看次数

Scala.React的状态是什么?

我刚读过Deprecating the Observer Pattern并发现它非常吸引人.

文档中描述的Scala.React包的状态是什么?我找到了一个Scala.React快照的tarball,但似乎没有太多文档或主动维护.我还发现了ScalaFX,看起来它可能与反应式编程有关,但同样没有维护.

是否有任何项目以本文中的想法为基础,创建基于被动反应的GUI框架?

scala frp

57
推荐指数
4
解决办法
6587
查看次数

为什么要弃用观察者模式?

我注意到我的依赖注入,观察者模式繁重的代码(使用Guava的EventBus)通常比我过去编写的没有这些功能的代码更难调试.特别是在尝试确定调用观察者代码的时间和原因时.

马丁·奥德斯基和朋友们写了一篇冗长的论文,题目是"弃用观察者模式",我还没有花时间阅读它.

我想知道观察者模式的错误是什么,以及更好地引导这些聪明人写这篇论文的(建议的或其他的)替代方案.

首先,我确实在这里找到了一篇(有趣的)论文批评.

oop design-patterns observer-pattern

39
推荐指数
3
解决办法
2万
查看次数

Scala中的GUI编程

我正在尝试学习Scala,我想通过编写一个简单的swing应用来学习,但我不确定在功能世界中GUI编程是什么样的,特别是在使用Scala时.

来自OO/Java背景的任何指针,教程或陷阱都非常受欢迎.

java user-interface swing functional-programming scala

16
推荐指数
2
解决办法
1万
查看次数

惯用属性更改了scala中的通知?

我试图在WPF/silverlight数据绑定中使用数据绑定看到一种更清晰的替代方案(对于Scala来说是惯用的) - 即实现INotifyPropertyChanged.首先,一些背景:

在.Net WPF或silverlight应用程序中,您具有双向数据绑定的概念(即,将UI的某些元素的值绑定到DataContext的.net属性,以便更改为UI元素影响属性,反之亦然.实现这一点的一种方法是在DataContext中实现INotifyPropertyChanged接口.不幸的是,这为你添加到"ModelView"类型的任何属性引入了很多样板代码.这是它的外观在斯卡拉:

trait IDrawable extends INotifyPropertyChanged
{    
      protected var drawOrder : Int = 0
      def DrawOrder : Int = drawOrder
      def DrawOrder_=(value : Int) {
            if(drawOrder != value) {
                  drawOrder = value
                  OnPropertyChanged("DrawOrder")
            }
      }

      protected var visible : Boolean = true
      def Visible : Boolean = visible
      def Visible_=(value: Boolean) = {
            if(visible != value) {
                  visible = value
                  OnPropertyChanged("Visible")
            }
      }
      def Mutate() : Unit = {
          if(Visible) {
              DrawOrder += 1 // Should trigger …
Run Code Online (Sandbox Code Playgroud)

scala scala-2.8 scala-2.7

11
推荐指数
1
解决办法
660
查看次数

使用函数编程语言处理具有内部状态的外部库的最优雅方法是什么?

我目前正在玩Scala开发,但我需要与诸如box2d之类的库集成来处理物理.问题是,这需要依赖于管理其自身状态的外部库.您可以跟踪传递到box2d世界的物体.总结一下有用的方面:

  • Box2d管理世界中的状态,并在每个滴答/步骤后修改它们
  • 您创建(使用FP)传递到此世界的实体
  • Box2d在内部修改这些实体的状态
  • 要跟踪对象,请保持对它们的引用
  • 您很可能希望使用正文中的信息来呈现您的代码,因此我认为跟踪该信息的唯一方法是跟踪可变集合中的所有引用.它需要在所有帧中存活.

所以我的问题是:

如何以优雅的方式跟踪这些引用(用于函数式编程),以及如何在代码的其余部分中最小化它对纯度的影响?

像国家单子这样的东西在这里我不会帮助我

haskell functional-programming scala referential-transparency

11
推荐指数
1
解决办法
638
查看次数

如何使用Scala优雅地实现管道模式

我正在寻找使用Scala构建管道模式.我希望在编写管道对象后,它们可以像这样连接在一起:

Pipeline1 :: Pipeline2 :: Pipeline3 ...
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经尝试了一些想法.有些工作,有些则没有.但它们似乎都没有完全摆脱样板代码.以下是我最接近的.

首先定义Pipeline和Source抽象类:

// I is the input type and O is the output type of the pipeline
abstract class Pipeline[I, +O](p: Pipeline[_, _ <: I]) {

  val source = p
  val name: String
  def produce(): O
  def stats():String
}
abstract class Source[+T] extends Pipeline[AnyRef, T](null)
Run Code Online (Sandbox Code Playgroud)

接下来,我创建了两个管道并尝试将它们链接在一起

// this creates a random integer
class RandomInteger extends Source[Int] {
  override val name = "randInt"

  def produce() = {
    scala.Math.round(scala.Math.random.asInstanceOf[Float] * 10)
  }

  def stats()="this pipeline …
Run Code Online (Sandbox Code Playgroud)

pipeline scala

8
推荐指数
2
解决办法
6982
查看次数