Tag: scala

我可以做什么我的scala代码,所以它会更快地编译?

我有一个大的Scala代码库。 ( https://opensource.ncsa.illinois.edu/confluence/display/DFDL/Daffodil%3A+Open+Source+DFDL ) 这就像70K行的scala代码。 我们在斯卡拉2.11.7 开发变得越来越困难,因为编译 – 编辑 – 编译 – testing – debugging周期对于小的变化来说太长了。 增量重新编译时间可以是一分钟,这是没有优化打开。 有时候更长。 这是没有编辑到文件中的很多更改。 有时候,一个非常小的变化会导致巨大的重新编译。 所以我的问题:我可以通过组织代码的方式来做什么,这将提高编译时间? 例如,将代码分解成更小的文件? 这会有帮助吗? 比如,更小的图书馆? 例如,避免使用implicits? (我们有很less) 例如,避免使用特质? (我们有吨) 例如,避免大量的import? (我们有很多 – 包的边界在这一点上是非常混乱的) 还是我真的没有什么可以做的呢? 我觉得这个非常长的汇编在某种程度上是由于依赖关系导致了大量的重新编译,而我正在考虑如何减less错误的依赖关系……但这只是一个理论 我希望别人能够阐明一些我们可能做的事情,这会提高编译速度,从而增加更改。

Scala中`T {}`是做什么的

浏览无形的代码,我在这里和这里看到这个看似无关的代码: trait Witness extends Serializable { type T val value: T {} } trait SingletonOps { import record._ type T def narrow: T {} = witness.value } 我几乎将它视为一个错字,因为它什么都不做,但显然它做了一些事情。 看到这个提交: https : //github.com/milessabin/shapeless/commit/56a3de48094e691d56a937ccf461d808de391961 我不知道它是做什么的。 有人可以解释吗?

Scalastring与java.lang.String – types推断

在REPL中,我定义了一个函数。 请注意返回types。 scala> def next(i: List[String]) = i.map {"0" + _} ::: i.reverse.map {"1" + _} next: (i: List[String])List[java.lang.String] 如果我指定返回types为String scala> def next(i: List[String]): List[String] = i.map {"0" + _} ::: i.reverse.map {"1" + _} next: (i: List[String])List[String] 为什么区别? 我也可以指定返回types为List [Any],所以我猜string只是一个包装到java.lang.String的超types。 这会有什么实际的影响,或者我可以安全地不指定返回types?

在scala中的string连接和Java一样昂贵吗?

在Java中,由于使用+运算符附加string的性能差,因此使用StringBuilder进行string连接是一种常见的最佳做法。 是否为Scala推荐相同的做法,或者改进了Java如何执行string连接的语言?

Hibernate和Scala

我一直在玩Scala,我想知道是否有任何经验使用hibernate和mysql作为scala对象的持久存储? 它是开箱即用还是有很多事情要做?

嵌套方法的成本

在Scala中,可以在其他方法中定义方法。 这将它们的使用范围限制在定义块的内部。 我使用它们来提高使用多个高阶函数的代码的可读性。 与匿名函数文字相反,这允许我在给他们有意义的名字之前通过他们。 例如: class AggregatedPerson extends HashSet[PersonRecord] { def mostFrequentName: String = { type NameCount = (String, Int) def moreFirst(a: NameCount, b: NameCount) = a._2 > b._2 def countOccurrences(nameGroup: (String, List[PersonRecord])) = (nameGroup._1, nameGroup._2.size) iterator.toList.groupBy(_.fullName). map(countOccurrences).iterator.toList. sortWith(moreFirst).head._1 } } 是否有运行成本,因为我应该知道嵌套的方法定义? 封闭的答案是否有所不同?

学习scala的小型和好的scala项目 – 尤其是函数式编程和types系统

我已经学习了几个月的Scala,但仍然在初学者水平。 现在我发现我在函数式编程和scala的types系统方面遇到了很大的麻烦。 我试图find一些文件和博客,但我不明白其中的大部分(尤其是types系统的)。 所以我正在寻找一些小的,很好的Scala项目,我可以阅读来源学习。 你能推荐我一些吗?

斯卡拉有警卫吗?

我几天前开始学习Scala,在学习Scala时,我将其与其他函数式编程语言(如Haskell , Erlang )进行了比较,后者对此我有一定的了解。 斯卡拉有可用的守卫序列吗? 我在Scala中进行了模式匹配,但是有没有其他概念等同于另外的守卫呢?

将项目添加到不可变的Seq

说,我有一个string序列作为input,我想获得一个新的不变的Seq ,它由input的元素和一个项目"c" 。 以下是我发现的两种方法: assert(Seq("a", "b", "c") == Seq("a", "b") ++ Seq("c")) – 这个问题似乎是实例化临时序列( Seq("c") )仅仅是为了操作而是冗余的并且会导致开销 assert(Seq("a", "b", "c") == List("a", "b") ::: "c" :: Nil) – 这个将input集合的types限制为List ,所以Seq("a", "b") ::: "c" :: Nil将不起作用。 另外,似乎实例化一个Nil可能会导致开销 我的问题是: 有没有其他的方式来执行这个操作? 哪一个更好? 不是Seq("a", "b") ::: Nil没有被允许Scala的开发人员的缺陷?

使用Scala进行新开发的最佳用例是什么?

为什么我应该select另一种语言的Scala来完成一个新的项目? 它在哪些领域擅长? 注意 有几个很好的答案给出,遗憾的是我只能标记为接受的答案。 不过,总的来说,Scala的吸引力来自两个主要的东西: 优秀的并发支持 吸引顶尖的工程人才