Tag: 斯卡拉

多种自我types可能吗?

我想要做下面的事情,但自我types的行只是不编译。 我有这个语法错误,或者这是不可能的? trait A { def aValue = 1 } trait B { def bValue = 1 } trait C { a : A, b : B => def total = a.aValue + b.bValue } class T extends C with A with B { …

Unit和Nothing有什么区别?

Unit和Nothing表示一个不返回任何东西的函数。 他们之间有什么区别?

在Java 8中是否有相当于Scala的呢?

就像Java 8 java.util.Optional<T>有点类似于Scala的Option[T]types,是否有相当于Scala的Either[L, R] ?

<:<斯卡拉运算符

任何人都可以在scala中提供<:<运算符的一些细节。 我认为: if(apple <:< fruit) //checks if apple is a subclass of fruit. 还有其他解释吗? 我在scala源文件中看到很多定义。

什么替代类variables在斯卡拉?

在Java中,我有时使用类variables为每个新实例分配一个唯一的ID。 我做类似的事情 public class Foo { private static long nextId = 0; public final long id; public Foo() { id = nextId; nextId++; } […] } 我如何在Scala中做到这一点?

在Scala中find与谓词相匹配的项目

我正在尝试search匹配某个谓词的列表中的某个项目的scala集合。 我不一定需要返回值,只是testing列表是否包含它。 在Java中,我可能会这样做: for ( Object item : collection ) { if ( condition1(item) && condition2(item) ) { return true; } } return false; 在Groovy中,我可以这样做: return collection.find { condition1(it) && condition2(it) } != null 斯卡拉这样做的惯用方法是什么? 我当然可以将Java循环风格转换为Scala,但我觉得有一个更实用的方法来实现这一点。

斯卡拉的懒惰的论点:他们是如何工作的?

在parsing器组合器库的文件Parsers.scala(Scala 2.9.1)中,我似乎遇到了一个不太为人所知的名为“lazy arguments”的Scala特性。 这是一个例子: def ~ [U](q: => Parser[U]): Parser[~[T, U]] = { lazy val p = q // lazy argument (for(a <- this; b <- p) yield new ~(a,b)).named("~") } 很显然,这里有一些事情将名称参数赋值给懒惰的val p 。 到目前为止,我还没有能够解决这个问题,为什么它是有用的。 谁能帮忙?

同伴对象在类中时使用.tupled方法

我正在从Slick迁移到Slick 2,而在Slick 2中,您将在投影到一个案例类时使用tupled方法(如http://slick.typesafe.com/doc/2.0.0所示-RC1 / migration.html ) 问题是案例类有一个伴侣对象,即如果你有这样的事情 case class Person(firstName:String,lastName:String) { } 随同伴侣对象 object Person { def something = "rawr" } 在相同的范围内, tupled方法不再起作用,因为它试图在object上运行tupled ,而不是case class 。 有没有办法检索Person的case class而不是object ,所以你可以正确调用tupled ?

List中的元素用scalareplace

你如何用索引replace一个元素与不可变列表。 例如 val list = 1 :: 2 ::3 :: 4 :: List() list.replace(2, 5)

为什么Spark使用java.lang.OutOfMemoryError失败:超出了GC开销限制?

我试图实现一个Hadoop Map / Reduce作业,在Spark之前工作正常。 Spark应用程序定义如下: val data = spark.textFile(file, 2).cache() val result = data .map(//some pre-processing) .map(docWeightPar => (docWeightPar(0),docWeightPar(1)))) .flatMap(line => MyFunctions.combine(line)) .reduceByKey( _ + _) MyFunctions.combine在哪里 def combine(tuples: Array[(String, String)]): IndexedSeq[(String,Double)] = for (i <- 0 to tuples.length – 2; j <- 1 to tuples.length – 1 ) yield (toKey(tuples(i)._1,tuples(j)._1),tuples(i)._2.toDouble * tuples(j)._2.toDouble) 如果用于input的列表很大,并且这是引发exception的位置,则combine函数会生成大量映射键。 在Hadoop […]