Tag: 斯卡拉

为什么Scala中没有可变的TreeMap?

是缺乏时间,有些技术问题,还是有一个原因,它不应该存在?

斯卡拉参考平等

你如何testing在斯卡拉参考平等? val x = new Obj val y = x x.referenceEquals(y) // evaluates to true

基于以前的值更新地图中的值的习惯方法

比方说,我将银行账户信息存储在一个不可变的Map : val m = Map("Mark" -> 100, "Jonathan" -> 350, "Bob" -> 65) 我想从马克的账户里拿出50美元。 我可以这样做: val m2 = m + ("Mark" -> (m("Mark") – 50)) 但是这个代码对我来说似乎很难看。 有没有更好的方法来写这个?

输出path在相同的模块错误之间共享

当我尝试在我的项目中编译任何类时,出现以下错误: Error scala: Output path …/eval/target/test-classes is shared between: Module 'eval' tests, Module 'eval' tests Output path …/eval/target/classes is shared between: Module 'eval' production, Module 'eval' production Please configure separate output paths to proceed with the compilation. 我已经看到了如何在IDEA中设置输出path,我已经完成了。 但是,由于错误声称它是在同一模块之间共享,我无法解决它。 Obs .:使用Maven和IntelliJ IDEA。 请,谁能帮忙?

Haskell,Scala,Clojure,高性能模式匹配和并发性select

最近我读了很多关于FP在并发执行和性能方面的优点的博文, 我对FP的需求很大程度上受到我正在开发的应用程序的影响,我的应用程序是一个基于状态的数据注入到另一个时间非常关键(每秒接近200万事务)的子系统。 我有几个这样的子系统需要testing。 我正在认真考虑使用FP来实现并行性,并希望采取正确的方法,很多SO上的文章都谈到了Scala,Haskell和Clojure的语言结构,库和JVM支持的缺点和优点。 从语言的angular度来看,只要能帮助我达到目标,我就可以学习任何语言。 某些post赞同Haskell的模式匹配和语言的简单性,基于JVM的FP lang在使用现有的java库方面有很大的优势。 JaneStreet是OCAML的大支持者,但是我真的不确定开发者支持和帮助OCAML的论坛。 如果有人处理这样的大数据,请分享您的经验。

为什么case类伴侣对象扩展FunctionN?

当你创build一个case类时,编译器会创build一个相应的伴随对象,其中包含一些case类的好东西:一个apply工厂方法匹配主构造函数equals , hashCode和copy 。 有点奇怪,这个生成的对象扩展了FunctionN。 scala> case class A(a: Int) defined class A scala> A: (Int => A) res0: (Int) => A = <function1> 只有在以下情况下才能这样做: 没有手动定义的伴侣对象 只有一个参数列表 没有types参数 案例类不是抽象的。 似乎是两年前添加的 。 最新的化身在这里 。 有没有人使用这个,或知道为什么被添加? 它使用静态转发器方法稍微增加了生成的字节码的大小,并显示在伴随对象的#toString()方法中: scala> case class A() defined class A scala> A.toString res12: java.lang.String = <function0> UPDATE 使用单个apply方法手动创build的对象不会被自动视为FunctionN : object HasApply { def […]

地道的build设,以检查是否订购一个集合

随着学习的意图和进一步的这个问题 ,我一直对一个algorithm检查一个列表(或集合)是否是有序的algorithm的显式recursion的惯用替代好奇。 (我通过使用运算符来比较和Int作为types来保持简单;我想在深入研究它的generics之前先看看这个algorithm) 基本的recursion版本是(by @Luigi Plinge): def isOrdered(l:List[Int]): Boolean = l match { case Nil => true case x :: Nil => true case x :: xs => x <= xs.head && isOrdered(xs) } performance不佳的地道方式是: def isOrdered(l: List[Int]) = l == l.sorted 使用fold的另一种algorithm: def isOrdered(l: List[Int]) = l.foldLeft((true, None:Option[Int]))((x,y) => (x._1 && x._2.map(_ <= y).getOrElse(true), […]

我应该什么时候(而不应该)使用Scala的@inline注释?

我相信我理解了内联函数的基础知识:不是函数调用导致参数被放置在堆栈上,而是发生调用操作,函数的定义在编译时被复制到调用的位置,从而节省了调用开销在运行时。 所以我想知道: scalac是否使用智能来内联一些函数(例如,私有def)而没有注释的提示? 我该如何判断什么时候向scalac暗示它是函数的一个好主意呢? 任何人都可以共享应该或不应该内联的函数或调用的例子吗?

`::`和`+:`之间有什么区别?

List有两个方法被指定将一个元素预先添加到一个(不可变的)列表中: +:实施Seq.+:和 :: :(仅在List定义) +:技术上具有更一般的types签名 – def +:[B >: A, That](elem: B)(implicit bf: CanBuildFrom[List[A], B, That]): That def ::[B >: A](x: B): List[B] – 但是忽略隐含的,根据文档消息只要求List[B] ,签名是等价的。 List.+:和List.:: ?有什么区别? 如果它们实际上是相同的,那么我认为+:会避免依赖具体的实现List 。 但为什么又定义了另一个公共方法,客户端代码何时会调用它? 编辑 还有一个::模式匹配提取器,但我想知道这些特定的方法。 另请参见: Scala列表连接,::: vs ++

斯卡拉控制台 – 代码更改不反映在控制台

我使用scala sbt控制台来testing我的方法。 (命令: sbt然后控制台 )但在eclipse或其他外部编辑器中完成的代码更改,并没有得到反映在sbt控制台。 每一次,我必须退出控制台(使用Crt + D),并再次使用控制台命令启动它来查看更改。 任何一个面临这个问题? 有什么办法从控制台重新加载代码? 我正在使用Ubuntu 64位,