Tag: scala

与Scala / Akka演员相比,Java线程怎么样?

我只是比较斯卡拉演员与Java线程的performance。 我惊异地看到了差异,我观察到,在我的系统中,我能够产生最多2000线程(一次只能生活)。但是使用同一个系统,我能够产生大约50万个scala的演员。 这两个程序都使用了大约81MB的JVM堆内存。 你能解释一下java线程是如何比scala / akka actor更重吗? 什么是使scala-actor这么重量轻的关键因素? 如果我想获得最佳的可伸缩性,我应该去基于演员的Web服务器,而不是基于Java的传统的Web /应用服务器,如JBoss或Tomcat? 谢谢。

在Scala中抛出exception,什么是“官方规则”

我遵循Coursera的Scala课程。 我也开始阅读Odersky的Scala书。 我经常听到的是,在函数式语言中抛出exception不是一个好主意,因为它打破了控制stream程,而且我们通常会返回一个带有失败或成功的exception。 Scala 2.10似乎也会提供这个方向的Try。 但是在这本书和课程中,马丁·奥德斯基(Martin Odersky)似乎并没有(至less现在)说exception是不好的,他用了很多。 我也注意到方法断言/要求… 最后,我有点困惑,因为我想遵循最佳做法,但他们不清楚,语言似乎在双向… 有人可以解释我应该在哪种情况下使用?

使用或者在Scala代码中处理失败

Option monad是一个很好的expression方式来处理Scala中的无所事事。 但是如果在“什么都没有”的情况下需要logging一条消息呢? 根据Scala API文档, 这两种types经常用作scala的替代选项。其中,Left表示失败(按惯例),Right与Some类似。 然而,我没有运气find使用Either的最佳实践,也没有好的现实世界的例子来处理失败。 最后,我为自己的项目提出了以下代码: def logs: Array[String] = { def props: Option[Map[String, Any]] = configAdmin.map{ ca => val config = ca.getConfiguration(PID, null) config.properties getOrElse immutable.Map.empty } def checkType(any: Any): Option[Array[String]] = any match { case a: Array[String] => Some(a) case _ => None } def lookup: Either[(Symbol, String), Array[String]] = for […]

用于Scala中Streams的用例

在Scala中有一个Stream类,非常像迭代器。 迭代器和stream在斯卡拉之间的主题差异? 对两者之间的相似性和差异提供了一些见解。 看到如何使用stream是非常简单的,但我没有很多常见的使用情况下,我会使用stream而不是其他工件。 我现在的想法是: 如果你需要使用无限的系列。 但是这对我来说似乎不是一个常见的用例,所以它不符合我的标准。 (请纠正我,如果这是常见的,我只是有一个盲点) 如果您有一系列数据需要计算每个元素,但您可能需要重复使用多次。 这很弱,因为我可以将它加载到一个列表中,这个列表在开发人员群体的大部分概念上更容易遵循。 也许有大量的数据或计算成本很高的系列,并且很有可能你所需要的项目不需要访问所有的元素。 但是在这种情况下,迭代器将是一个很好的匹配,除非需要进行多次search,在这种情况下,即使效率稍低,也可以使用列表。 有一系列复杂的数据需要重复使用。 这里也可以使用一个列表。 虽然在这种情况下,这两种情况将同样难以使用,并且由于不是所有的元素都需要被加载,所以Stream将会更好。 但是,不是那么平常……还是这样? 那么我错过了什么大用途? 或者大部分是开发人员偏好? 谢谢

有什么工具可以执行Scala代码的静态分析吗?

有什么工具可以执行Scala代码的静态分析,类似于FindBugs和PMD for Java或Splint for C / C ++? 我知道FindBugs在编译Java时产生的字节码上工作,所以我很好奇它是如何在Scala上工作的。 谷歌search(截至2009年10月27日)显示非常less。 谷歌search(截至2010年2月1日)揭示了这个问题。

为什么Scala在一个类中没有静态成员?

我知道你可以 间接定义它们 实现与伴侣对象类似的东西 ,但我想知道为什么作为一个语言devise是从类定义退出静态。

如果一个给定的string包含一个给定的子string,寻找什么是惯用的scala方式?

我有两个string在斯卡拉,我想找出,如果较大的string( needle )包含一个较小的string( haystack )。 我发现是用这样的正则expression式和匹配( 从这个问题 ): needle.r.pattern.matcher(haystack).matches (1)对这样一个简单的问题严重过度,但更重要的是(2)对我不起作用,因为 "needle".r.pattern.matcher("Finding needle in haystack").matches 回报 Boolean = false

Scala检查元素是否出现在列表中

我需要检查一个string是否存在于一个列表中,并调用一个相应接受布尔值的函数。 是否可以用一个class轮来实现这一点? 下面的代码是我能得到的最好的代码: val strings = List("a", "b", "c") val myString = "a" strings.find(x=>x == myString) match { case Some(_) => myFunction(true) case None => myFunction(false) } 我相信可以用较less的代码来做到这一点,但我不知道怎么做!

比较提升与Play2

我以前用java的play2。 这感觉有点像样板,特别是如果你用java与akka。 但这不是框架的错误。 昨天我读“斯卡拉不耐烦”,我真的很喜欢这种语言。 现在我看了两个框架Lift 2.5和Play 2.0.3。 我认为电梯有更高的学习曲线,我不能只是做一些事情。 这不适合我。 从我看到的,Lift有一个非常漂亮和干净的devise。 但对我而言,很难说出主要的差异。 我认为这两个框架都很棒。 视图优先的方法不允许你在你的模板中编码,而是你必须在代码片段。 我很喜欢这个,因为它看起来更有组织性。 它也让你使用一个正常的HTML编辑器。 (我没有太多的经验,这只是我的第一印象) 为了安全起见,我不认为这是框架的工作。 无状态/有状态:很难区分主要区别在哪里。 我只知道如果你使用networking套接字,游戏也有一个状态。 按F5后,这两个框架都能够编译。 我非常喜欢这个function。 这两个框架都使用sbt 电梯来与授权,但我认为有一个play2斯卡拉插件,做同样的事情 Lift有一个用于mongoDB的ORM映射器。 因为我想使用noSQL,这对我来说看起来更清洁。 (再次没有太多的经验) 编辑有一个scala mongodb在play2的ORM映射器https://github.com/leon/play-salat asynchronous – 播放2使用Akka。 不知道电梯使用什么,但他们也有类似的东西。 Lift提供CSRF支持。 Play2有一个CSRF模块,但是这样会为您的代码添加样板。 无状态身份validation似乎有一些安全漏洞。 这两个框架都有状态validation。 (play2有状态/无状态,电梯有状态) 每个框架的优点是什么?

Scala相当于C#的扩展方法吗?

在C#中,你可以写: using System.Numerics; namespace ExtensionTest { public static class MyExtensions { public static BigInteger Square(this BigInteger n) { return n * n; } static void Main(string[] args) { BigInteger two = new BigInteger(2); System.Console.WriteLine("The square of 2 is " + two.Square()); } }} 这个简单的扩展方法在Scala中看起来如何?