我正在Scala上学习Functional Programming Principles in Scala | Coursera
课程。
我对immutability
,so many functions
和so much dependencies on recursion
无法理解,Scala
如何真正适合现实世界的应用。
我的意思是来自imperative languages
我发现StackOverflow
或Garbage Collection
冒险并且正在运行的所有内容的多个副本Out Of Memory
我在这里失踪了什么?
答案 0 :(得分:3)
@tailrec
添加scala.annotation.tailrec
以确保您的函数是100%尾递归。这基本上是一个循环。elem :: list
所有数据都在两个列表之间共享 - 真棒!只创建头并指向列表。想象一下,每次客户端要求时,您都必须创建一个新的列表深度克隆。var
,即结果总是相同的。Option[T]
并与null
进行比较。在for
理解中使用它们。异常变得非常特殊,Option, Try, Box, Either
以非常好的方式传达失败。答案 1 :(得分:0)
真实世界的应用程序越来越受事件驱动,涉及在需要不可变数据结构的不同进程或系统之间传递数据
在大多数情况下,我们要么操纵数据要么等待资源。 在这种情况下,它很容易挂钩回调与Actors
看一看 http://pavelfatin.com/scala-for-project-euler/ 这给出了一些使用map fllter等函数的例子。这些函数通常由Ruby应用程序使用
不变性和递归的组合避免了很多堆栈溢出问题。在处理事件驱动的应用程序时,这很容易实现
akka.io是一个经典的例子,可以在scala中非常简洁地构建。