小编Eug*_*ota的帖子

我如何形成scala SortedMaps的联合?

(我正在使用Scala nightlies,并在2.8.0b1 RC4中看到相同的行为.我是Scala的新手.)

我有两个SortedMap我想组成的联盟.这是我想要使用的代码:

import scala.collection._

object ViewBoundExample {
    class X
    def combine[Y](a: SortedMap[X, Y], b: SortedMap[X, Y]): SortedMap[X, Y] = {
        a ++ b
    }
    implicit def orderedX(x: X): Ordered[X] = new Ordered[X] { def compare(that: X) = 0 }
}
Run Code Online (Sandbox Code Playgroud)

这里的想法是'隐含'语句意味着Xs可以转换为Ordered[X]s,然后将SortedMaps 组合成另一个SortedMap,而不仅仅是一个映射.

当我编译时,我得到了

sieversii:scala-2.8.0.Beta1-RC4 scott$ bin/scalac -versionScala compiler version
2.8.0.Beta1-RC4 -- Copyright 2002-2010, LAMP/EPFL

sieversii:scala-2.8.0.Beta1-RC4 scott$ bin/scalac ViewBoundExample.scala
ViewBoundExample.scala:8: error: type arguments [ViewBoundExample.X] do not
    conform to method …
Run Code Online (Sandbox Code Playgroud)

scala sortedmap scala-2.8 scala-collections

6
推荐指数
1
解决办法
1643
查看次数

如何使Scala的不可变集合保存不可变对象

我正在评估Scala,并且我的不可变集合存在问题.

我想制作完全不可变的不可变集合,直到所有包含的对象,它们引用的对象,无限制.

有一个简单的方法吗?

http://www.finalcog.com/immutable-containers-scala上的代码说明了我正在努力实现的目标,以及令人讨厌的工作(ImmutablePoint).

解决方法的问题是,每次我想要更改对象时,我都必须手动创建新副本.我知道运行时必须实现copy-on-write,但这对开发人员是否透明?

我想我正在寻找制作不可变对象,其中方法改变当前对象状态,但对象的所有其他'val'(和所有不可变容器)引用保持'旧'状态.

functional-programming scala immutability scala-collections

6
推荐指数
1
解决办法
969
查看次数

最好的scala成语,用于查找和返回

这是我经常遇到的事情,但我不知道这种优雅的做法.我有一个Foo对象的集合.Foo有一个方法bar()可以返回null或Bar对象.我想扫描集合,调用每个对象的bar()方法,并在第一个返回实际引用时停止并从扫描返回该引用.

明显:

foos.find(_.bar!= null).bar

诀窍,但两次调用#bar.

scala scala-collections

6
推荐指数
2
解决办法
875
查看次数

Scala:保持字符串对的好方法

对于小型集合,什么是保持字符串对的简洁方法,这些字符串不一定是键值(可能有重复的键)?List [List [String]]显然有效,但看起来很脏.

干杯
帕萨

scala map set scala-collections

6
推荐指数
2
解决办法
668
查看次数

如何在Build.scala中设置sbt-proguard插件

我想在我的项目中使用sbt-proguard插件,但我需要在Build.scala文件中进行设置.

我阅读了文档,但是只有一个build.sbt文件的例子,在我的情况下不起作用.我需要知道如何为我的Build.scala文件配置插件.

这是repo的链接:https://github.com/sbt/sbt-proguard/blob/master/README.md#example

仅供参考:我使用的是scala.version = 2.11.4和sbt.version = 0.13.5

scala sbt scala-2.11 sbt-proguard

6
推荐指数
1
解决办法
977
查看次数

sbt:如果测试失败,如何编写运行testQuick的任务?

这个问题来自推特上的 Martin Grotzke .

他想写一个任务(或者我认为的命令)可以:

  1. 首先运行test,如果失败,请跟进testOnly
  2. 聚合构建中的多个子项目

有效模拟Bash:

$ sbt test || sbt testQuick
Run Code Online (Sandbox Code Playgroud)

动机是两次运行失败的测试来解决片状测试.

scala sbt

6
推荐指数
1
解决办法
436
查看次数

从可迭代创建集合时,我是否必须转换为Seq?

也许我正在咆哮错误的树(再次),但如果通常的做法是将一个属性输入为a scala.collection.immutable.Set[A],那么你将如何创建其中一个给定的scala.Iterable[A]?例如:

class ScalaClass {
    private var s: scala.collection.immutable.Set[String]

    def init(): Unit = {
        val i = new scala.collection.mutable.HashSet[String] 
        //ADD SOME STUFF TO i

        s = scala.collection.immutable.Set(i) //DOESN'T WORK

        s = scala.collection.immutable.Set(i toSeq : _ *) //THIS WORKS
    }
}
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么有必要通过a创建不可变集Seq(或者如果不是,那么我该怎么做)?

scala scala-collections

5
推荐指数
1
解决办法
1813
查看次数

扩展Scala集合

我想要一个试图覆盖现有密钥值的Map.我试过了:

trait Unoverwriteable[A, B] extends scala.collection.Map[A, B] {
    case class KeyAlreadyExistsException(e: String) extends Exception(e)

    abstract override def + [B1 >: B] (kv: (A, B1)): Unoverwriteable[A, B1] = {
        if (this contains(kv _1)) throw new KeyAlreadyExistsException(
            "key already exists in WritableOnce map: %s".format((kv _1) toString)
        )
        super.+(kv)
    }

    abstract override def get(key: A): Option[B] = super.get(key)
    abstract override def iterator: Iterator[(A, B)] = super.iterator
    abstract override def -(key: A): Unoverwriteable[A, B] = super.-(key)
}
Run Code Online (Sandbox Code Playgroud)

得到了:

<console>:11: error: type mismatch;
 found   : …
Run Code Online (Sandbox Code Playgroud)

generics scala traits extend scala-collections

5
推荐指数
1
解决办法
3086
查看次数

我可以在Scala中创建一个使用不同的equals / hashCode / compare实现的集合吗?

我正在寻找创建身份集的简单方法。我只希望能够跟踪遍历图形时是否“看到”了特定对象。

我不能使用常规Set,因为Set使用“ ==”(Scala中的equals方法)来比较元素。我想要的是一个使用“ eq”的集合。

有什么方法可以在Scala中创建一个Set,该Set使用一些应用程序指定的方法测试相等性,而不是在set元素上调用equals?我在寻找可以覆盖但找不到的“ wrapEquals”方法。

我知道我可以使用Java的IdentityHashMap,但是我正在寻找更通用的东西。

我的另一个想法是将每个set元素包装到另一个根据eq实现equals的对象中,但是生成大量新对象只是为了获得一个新的equals实现是浪费的。

谢谢!

scala scala-collections

5
推荐指数
1
解决办法
1935
查看次数

5
推荐指数
1
解决办法
3413
查看次数