Scala - 为什么演员模型是混合OO和函数式编程的一个例子?

时间:2014-05-14 01:17:39

标签: scala functional-programming actor

引用Chapter 1 of Programming in Scala

  

...在Scala中,函数值是一个对象。函数类型是类   可以由子类继承。这看起来似乎不过是   学术上的精确,但它对可扩展性有深远的影响。在   事实上先前显示的演员概念不可能   在没有功能和对象统一的情况下实现。

我不太明白为什么作者说没有统一OO和函数式编程就无法实现actor概念。有人可以解释一下吗?

举个例子,这是一个实现校验和计算器服务的简单Scala actor:

actor { 
    var sum = 0
    loop {
      receive {
        case Data(bytes)       => sum += hash(bytes)
        case GetSum(requester) => requester ! sum
      }
    }
  }

1 个答案:

答案 0 :(得分:1)

  

“我不太明白为什么作者说如果不统一OO和函数式编程就无法实现actor概念。”

作者在该引文中"Functional Programming"(尽管Scala确实在后面的章节中采用了许多这样的概念),而是......

  

..实际上,如果没有功能和对象的统一,就无法实现之前显示的actor概念。

这一点的主要含义是函数是First-Class,因此可以作为任何其他类型的值传递 - 这反过来使函数适用于回调,例如“反应”。

但是,显示的示例实际上并没有完全显示“函数和对象的统一”,即使它们在下面统一(即使模式匹配产生函数)。因此,报价应该更多地作为钓鱼线上的诱饵..

  

[Scala是一种在你身上成长的语言]