(我正在使用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,并且我的不可变集合存在问题.
我想制作完全不可变的不可变集合,直到所有包含的对象,它们引用的对象,无限制.
有一个简单的方法吗?
http://www.finalcog.com/immutable-containers-scala上的代码说明了我正在努力实现的目标,以及令人讨厌的工作(ImmutablePoint).
解决方法的问题是,每次我想要更改对象时,我都必须手动创建新副本.我知道运行时必须实现copy-on-write,但这对开发人员是否透明?
我想我正在寻找制作不可变对象,其中方法改变当前对象状态,但对象的所有其他'val'(和所有不可变容器)引用保持'旧'状态.
这是我经常遇到的事情,但我不知道这种优雅的做法.我有一个Foo对象的集合.Foo有一个方法bar()可以返回null或Bar对象.我想扫描集合,调用每个对象的bar()方法,并在第一个返回实际引用时停止并从扫描返回该引用.
明显:
foos.find(_.bar!= null).bar
诀窍,但两次调用#bar.
对于小型集合,什么是保持字符串对的简洁方法,这些字符串不一定是键值(可能有重复的键)?List [List [String]]显然有效,但看起来很脏.
干杯
帕萨
我想在我的项目中使用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
这个问题来自推特上的 Martin Grotzke .
他想写一个任务(或者我认为的命令)可以:
test,如果失败,请跟进testOnly有效模拟Bash:
$ sbt test || sbt testQuick
Run Code Online (Sandbox Code Playgroud)
动机是两次运行失败的测试来解决片状测试.
也许我正在咆哮错误的树(再次),但如果通常的做法是将一个属性输入为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(或者如果不是,那么我该怎么做)?
我想要一个试图覆盖现有密钥值的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) 我正在寻找创建身份集的简单方法。我只希望能够跟踪遍历图形时是否“看到”了特定对象。
我不能使用常规Set,因为Set使用“ ==”(Scala中的equals方法)来比较元素。我想要的是一个使用“ eq”的集合。
有什么方法可以在Scala中创建一个Set,该Set使用一些应用程序指定的方法测试相等性,而不是在set元素上调用equals?我在寻找可以覆盖但找不到的“ wrapEquals”方法。
我知道我可以使用Java的IdentityHashMap,但是我正在寻找更通用的东西。
我的另一个想法是将每个set元素包装到另一个根据eq实现equals的对象中,但是生成大量新对象只是为了获得一个新的equals实现是浪费的。
谢谢!
如何在scala(mutable/immutable)中创建有序映射?
scala ×10
sbt ×2
sortedmap ×2
extend ×1
generics ×1
immutability ×1
map ×1
sbt-proguard ×1
scala-2.11 ×1
scala-2.8 ×1
set ×1
traits ×1