首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala如何适用于大型可伸缩应用程序

Scala如何适用于大型可伸缩应用程序
EN

Stack Overflow用户
提问于 2014-01-04 10:37:06
回答 2查看 376关注 0票数 0

我正在学习Scala上的Functional Programming Principles in Scala | Coursera课程。我不能理解immutabilityso many functionsso much dependencies on recursionScala是如何真正适用于现实世界的应用程序的。

我的意思是,来自imperative languages的我看到了StackOverflowGarbage Collection的风险,而且我运行Out Of Memory的所有东西都有多个副本

我在这里漏掉了什么?

EN

回答 2

Stack Overflow用户

发布于 2014-01-04 13:03:02

  • 堆栈溢出:可以使您的递归函数尾部递归。从scala.annotation.tailrec添加@tailrec以确保您的函数是100%尾递归的。这基本上是一个循环。
  • ,最重要的是,递归解决方案只是众多模式中的一个。请参阅"Effective“为什么可变性不好。不可变数据更适合大型应用程序:不需要同步访问,客户端不能打乱数据内部结构,等等。在许多情况下,不可变结构非常有效。如果你在一个列表的头部添加一个元素:elem :: list,那么所有的数据都会在两个列表之间共享--太棒了!只创建head并指向列表。想象一下,每当客户端请求时,你都必须创建一个列表的新的深层克隆,for.
  • Expressions在Scala中更简洁,也许更懒惰--创建过滤器和映射,以及所有需要的应用。你也可以在Java中做同样的事情,但是仪式永远不会结束,所以通常开发人员只会在途中创建多个临时集合。
  • Martin Odersky将易变性定义为对时间/历史的依赖。这非常有趣,因为你可以在一个函数中使用var,只要其他代码不会以任何方式受到影响,即结果总是相同的。
  • 查看Option[T]并与null进行比较。在for理解中使用它们。异常变得非常异常,Option, Try, Box, Either以一种非常好的方式通信失败。与Java语言相比,
  • Scala允许编写更多的模块化和泛型代码。
  • 找到一段很好的Scala代码,并试着看看你将如何在Java中做到这一点-这将是不言而喻的。
票数 3
EN

Stack Overflow用户

发布于 2014-01-04 13:32:40

现实世界中的应用程序越来越多地由事件驱动,这涉及到在需要不可变数据结构的不同进程或系统之间传递数据

在大多数情况下,我们要么是在操作数据,要么是在等待资源。在这种情况下,很容易将回调与Actor挂钩

看看http://pavelfatin.com/scala-for-project-euler/,它给出了一些使用map fllter等函数的示例。

不变性和递归的结合避免了许多堆栈溢出问题。这在处理事件驱动的应用程序时很有用

akka.io是一个经典的例子,它可以非常简洁地构建在scala中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20916161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档