相关疑难解决方法(0)

Scala 2.8 breakOut

在Scala 2.8中,有一个对象scala.collection.package.scala:

def breakOut[From, T, To](implicit b : CanBuildFrom[Nothing, T, To]) =
    new CanBuildFrom[From, T, To] {
        def apply(from: From) = b.apply() ; def apply() = b.apply()
 }
Run Code Online (Sandbox Code Playgroud)

我被告知这会导致:

> import scala.collection.breakOut
> val map : Map[Int,String] = List("London", "Paris").map(x => (x.length, x))(breakOut)

map: Map[Int,String] = Map(6 -> London, 5 -> Paris)
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?为什么breakOut被称为我的论据List

scala scala-2.8 scala-collections

223
推荐指数
4
解决办法
3万
查看次数

当将`map`应用于`Set`时,你有时希望结果不是一组但忽略了这一点

或者如何在映射时避免意外删除重复项Set

这是我经常犯的错误.看下面的代码:

def countSubelements[A](sl: Set[List[A]]): Int = sl.map(_.size).sum
Run Code Online (Sandbox Code Playgroud)

该函数应计算所有包含列表的累计大小.问题是在将列表映射到它们的长度之后,结果仍然是a,Set并且所有大小为1的列表都减少为单个代表.

这只是我有这个问题吗?我能做些什么来防止这种情况发生?我想我很想有两种方法mapToSet,并mapToSeqSet.但是没有办法强制执行此操作,有时您不会在本地注意到您正在使用Set.

也许你甚至有可能Seq在另一个类中编写代码以及某些更改并且底层对象变成了Set

也许是最好的做法,不要让这种情况出现?

远程编辑破坏了我的代码

想象一下以下情况:

val totalEdges = graph.nodes.map(_.getEdges).map(_.size).sum / 2
Run Code Online (Sandbox Code Playgroud)

Node从图形中获取对象的集合,使用它们来获取它们的相邻边缘并对它们求和.如果graph.nodes返回a,则有效Seq.

如果某人决定将Graph其节点作为一个返回,它就会中断Set; 没有这个代码看起来可疑(至少不是我,你认为每个集合可能最终成为一个Set?)而不触及它.

scala

8
推荐指数
1
解决办法
359
查看次数

标签 统计

scala ×2

scala-2.8 ×1

scala-collections ×1