Tag: scala

是否有可能将元组赋值给Scala中的variables?

可能重复: 元组参数声明和赋值奇怪 在Scala中,可以通过以下方式对元组进行多variables赋值: val (a, b) = (1, 2) 但是赋值给variables的类似语法似乎不起作用。 例如,我想这样做: var (c, d) = (3, 4) (c, d) = (5, 6) 我想在多variables赋值中重用c和d 。 这可能吗?

如何模式匹配大型斯卡拉案例类?

考虑下面的Scala案例类: case class WideLoad(a: String, b: Int, c: Float, d: ActorRef, e: Date) 模式匹配允许我提取一个字段并丢弃其他字段,如下所示: someVal match { case WideLoad(_, _, _, d, _) => d ! SomeMessage(…) } 我想要做什么,当一个case类有20个奇数字段时,更有意义的是仅仅提取一些不涉及WideLoad(_, _, _, _, _, some, _, _, _, thing, _, _, interesting) 。 我希望命名的参数可以在这里帮助,虽然下面的语法不起作用: someVal match { case WideLoad(d = dActor) => dActor ! SomeMessage(…) // […]

如何使用Scala将1亿条logging加载到MongoDB中进行性能testing?

我有一个用Scala编写的小脚本,用于载入一个MongoDB实例,上面有100,000,000个样本logging。 这个想法是让数据库全部加载,然后做一些性能testing(如果需要的话调整/重新加载)。 问题是每十万条logging的加载时间几乎是线性增加的。 在我的加载过程开始时,只需要4秒来加载这些logging。 现在,在近6,000,000条logging中,加载相同数量(100,000)的时间需要300到400秒! 这慢了两个数量级! 查询仍然很快,但以这样的速度,我永远无法加载我想要的数据量。 如果我用我所有的logging(所有100,000,000!)写出一个文件,然后用mongoimport导入整个文件,这样会更快吗? 还是我的期望太高,我使用的数据库超出了它应该处理的? 有什么想法吗? 谢谢! 这是我的脚本: import java.util.Date import com.mongodb.casbah.Imports._ import com.mongodb.casbah.commons.MongoDBObject object MongoPopulateTest { val ONE_HUNDRED_THOUSAND = 100000 val ONE_MILLION = ONE_HUNDRED_THOUSAND * 10 val random = new scala.util.Random(12345) val connection = MongoConnection() val db = connection("mongoVolumeTest") val collection = db("testData") val INDEX_KEYS = List("A", "G", "E", "F") […]

为什么我的Scala尾recursion比while循环更快?

这里有两个解决scheme在Cay Horstmann的Scala中为Impatient执行4.9:“编写一个函数lteqgt(values:Array [Int],v:Int),返回一个三元组,它包含小于v的值,等于v,大于v“。 一个使用尾recursion,另一个使用while循环。 我认为两者都会编译成相似的字节码,但是while循环比尾recursion要慢2倍。这表明我的while方法写得不好。 import scala.annotation.tailrec import scala.util.Random object PerformanceTest { def main(args: Array[String]): Unit = { val bigArray:Array[Int] = fillArray(new Array[Int](100000000)) println(time(lteqgt(bigArray, 25))) println(time(lteqgt2(bigArray, 25))) } def time[T](block : => T):T = { val start = System.nanoTime : Double val result = block val end = System.nanoTime : Double println("Time = " + […]

取消select一个选项

说我有一个val s: Option[Option[String]] 。 因此它可以有以下值: Some(Some("foo")) Some(None) None 我想减less它,以便第一个变成Some("foo")而其他两个变成None 。 显然有很多方法可以完成这个任务,但是我正在寻找一个简单的,也许是内置的,不到一个class轮。

Scala返回types的元组函数

我想做一个scala函数,它返回一个scala元组。 我可以做这样的function: def foo = (1,"hello","world") 这将工作得很好,但现在我想告诉编译器我期望从函数返回而不是使用内置types推断(毕竟,我不知道什么是(1,"hello","world")是)。

如何在库中支持多个Scala版本

我有一个相当普通的Scala项目,目前正在使用Maven构build。 我想要支持Scala 2.9.x和即将推出的2.10,它不是二进制或源代码兼容的。 如果有必要的话,我愿意考虑转换到SBT,但是我遇到了一些挑战。 我对这个项目的要求是: 单一来源树(不分支)。 我相信试图支持每个Scala版本的多个并发“主”分支将是错过分支之间错误修正的最快方法。 版本特定的源目录。 由于Scala版本不是源兼容的,我需要能够为版本特定的源指定辅助源目录。 特定于版本的源码jar。 最终用户应该能够下载正确的源代码jar,以及正确的版本特定的源代码,用于他们的Scala for IDE版本集成。 综合部署。 我目前使用Maven发行版插件将新版本部署到Sonatype OSS存储库,并希望为发行版提供类似的简单工作stream程。 最终用户Maven支持。 我的最终用户通常是Maven用户,所以准确反映依赖关系的function性POM至关重要。 阴影jar支持。 我需要能够生成包含我的依赖项的子集的JAR, 并从已发布的POM中去除阴影依赖项。 我已经尝试过的事情: Mavenconfiguration文件。 我创build了一组Mavenconfiguration文件来控制使用哪个版本的Scala来构build,使用Maven build-helper插件来select版本特定的源代码树。 在发布之前,这一切都运行良好。 使用分类器来限定版本并不能正常工作,因为源代码的jar也需要自定义分类器('source-2.9.2'等),大多数IDE工具都不知道如何定位它们。 我尝试使用Maven属性将SBT风格的_ $ {scala.version}后缀添加到工件名称,但Maven不喜欢工件名称中的属性。 SBT。 一旦你可以使用它,就可以很好地工作(尽pipe有大量的文档,这不是一件小事)。 不利的一面是,似乎没有与Maven shade插件相当的function。 我看过: Proguard的。 该插件没有针对SBT 0.12.x进行更新,并且不会从源代码生成,因为它取决于另一个更改了groupIds的SBT插件,并且旧名称下没有0.12.x版本。 我还没有能够解决如何指示SBT忽略/replace插件的依赖关系。 OneJar。 这使用自定义类加载来运行embedded式jar的主要类,这不是所需的结果; 我希望我的项目的类文件在我的阴影依赖关系的jar文件中(可能是重命名的)类文件。 SBT大会插件。 这可以在一定程度上工作,但POM文件似乎包括我试图遮蔽的依赖关系,这对我的最终用户没有帮助。 我接受,可能没有一个解决scheme可以满足我对Scala的需求,或者我可能需要编写自己的Maven或Scala插件来完成目标。 但是,如果我可以,我想find一个现有的解决scheme。 更新 我接受@ Jon-Ander的出色答案 ,但对我来说,还是有一个杰出的作品,那就是一个统一的发布stream程。 我的build.sbt的当前状态在GitHub上 。 (我将在后面为后代重现它)。 sbt-release插件不支持多版本构build(也就是说, + […]

Scala 2.11 + Play Framework 2.3中的22个字段限制案例类别和function

斯卡拉2.11已经出来,22个字段限制的案例类似乎是固定的( 斯卡拉问题 , 发行说明 )。 这个问题对我来说已经有一段时间了,因为我使用案例类来模拟Play + Postgres Async中具有超过22个字段的数据库实体。 我在Scala 2.10中的解决scheme是将模型分解成多个case类,但是我发现这个解决scheme很难维护和扩展,我希望在切换到Play 2.3.0-RC1 + Scala 2.11之后,能够实现如下所述的内容。 0: package entities case class MyDbEntity( id: String, field1: String, field2: Boolean, field3: String, field4: String, field5: String, field6: String, field7: String, field8: String, field9: String, field10: String, field11: String, field12: String, field13: String, field14: String, field15: String, field16: String, […]

使用Scalaparsing器组合器来parsingCSV文件

我正在尝试使用Scala分析器组合器编写一个CSV分析器。 语法基于RFC4180 。 我想出了以下代码。 它几乎可以工作,但我无法正确分离不同的logging。 我错过了什么? object CSV extends RegexParsers { def COMMA = "," def DQUOTE = "\"" def DQUOTE2 = "\"\"" ^^ { case _ => "\"" } def CR = "\r" def LF = "\n" def CRLF = "\r\n" def TXT = "[^\",\r\n]".r def file: Parser[List[List[String]]] = ((record~((CRLF~>record)*))<~(CRLF?)) ^^ { case r~rs […]

在OO中编码标准ML模块

ML模块系统是数据抽象的编程语言支持的高水准标志。 然而,从表面上看,它似乎很容易用支持抽象types成员的面向对象语言进行编码。 例如,我们可以在Scala中对SML模块系统的元素进行编码,如下所示: SML签名:没有具体成员的斯卡拉特质 具有给定特征的SML结构:扩展给定特征的Scala对象 通过给定签名参数化的SML函子:Scala类将扩展给定特征的对象作为构造函数参数 有什么重要的function,这样的编码会错过? 任何可以用SML模块表示的编码无法expression的东西? SML使这种编码无法做到的任何保证?