相关疑难解决方法(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万
查看次数

Scala 2.8系列设计教程

我的气喘吁吁的困惑之后,有什么好的资源可以解释新的Scala 2.8集合库是如何构建的.我有兴趣找到有关以下内容如何组合在一起的一些信息:

  • 集合类/性状本身(例如List,Iterable)
  • 为什么存在Like类(例如TraversableLike)
  • 伴侣方法的用途(例如List.companion)
  • 我如何知道implicit给定点的范围内的对象

scala scala-2.8 scala-collections

73
推荐指数
1
解决办法
2万
查看次数

扩展Scala集合的简单示例

我正在寻找一个非常简单的子类化Scala集合的例子.我对这一切是如何以及为何有效的全面解释并不感兴趣; 很多这些都可以在这里和互联网上的其他地方找到.我想知道这样做的简单方法.

下面的类可能是一个尽可能简单的例子.这个想法是,使其子类Set[Int]有一个额外的方法:

class SlightlyCustomizedSet extends Set[Int] {
  def findOdd: Option[Int] = find(_ % 2 == 1)
}
Run Code Online (Sandbox Code Playgroud)

显然这是错误的.一个问题是没有构造函数可以将内容放入其中Set.CanBuildFrom必须构建一个对象,最好通过调用一些已知的库代码来知道如何构建它.我已经看到在配对对象中实现几个附加方法的示例,但它们显示了它是如何工作的或如何做更复杂的事情.我想看看如何利用库中已有的东西来解决这几行代码问题.实现这一目标的最简单,最简单的方法是什么?

inheritance scala scala-collections

10
推荐指数
1
解决办法
1616
查看次数

Scala编译器发现了什么CanBuildFrom实例?

大家好 请原谅我在Scala上提出一个愚蠢的问题.虽然我已经在Scala中编程了大约2年,但我仍然觉得很难理解其implicit用法.我们来举一个讨论的例子:

Array(1,2,3,4).map(x => x) 
Run Code Online (Sandbox Code Playgroud)

如果你查看scaladoc,你就无法mapArray课堂上找到这个方法.map可以应用的原因是在Array(1,2,3,4)implicit def intArrayOps (xs: Array[Int]): ArrayOps[Int]定义了隐式函数scala.Predef.

但是,有两个参数列表,第二个参数列表写为implicit bf: CanBuildFrom[Array[T], B, That]).现在我不知道该编译器发现一个适当的参数类型CanBuildFrom申请时mapArray(1,2,3,4).

scala implicit

7
推荐指数
2
解决办法
1009
查看次数

scala.collection.TraversableView.NoBuilder如何工作?

我读了

我想我有点处理canBuildFrom.

但后来我查看了源码TraversableView,我看到了:

object TraversableView {
  class NoBuilder[A] extends Builder[A, Nothing] {
    def +=(elem: A): this.type = this
    def iterator: Iterator[A] = Iterator.empty
    def result() = throw new UnsupportedOperationException("TraversableView.Builder.result")
    def clear() {}
  }
  type Coll = TraversableView[_, C] forSome {type C <: Traversable[_]}
  implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, TraversableView[A, Traversable[_]]] =
    new CanBuildFrom[Coll, A, TraversableView[A, Traversable[_]]] {
      def apply(from: Coll) = new NoBuilder
      def apply() = new NoBuilder
    }
}
Run Code Online (Sandbox Code Playgroud)

TraversableView …

collections scala

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

为什么不能编译这个简单的scala示例?

class X extends Map[String, String] {
    def x(): X = { X() } // can't be compiled
}
Run Code Online (Sandbox Code Playgroud)

无法编译,错误是:

<console>:6: error: not found: value X
def x(): X = { X() } // can't be compiled
Run Code Online (Sandbox Code Playgroud)

为什么找不到X?我看不出如何纠正它.


更新:

我现在知道原因.我想要做的是创建一个扩展的类HashMap,因为Map()它将返回一个实例HashMap,所以我想我可以扩展Map.现在,正确的代码应该是:

import scala.collection.immutable.HashMap
class X extends HashMap[String, String] {
    def x(): X = { new X() }
}
Run Code Online (Sandbox Code Playgroud)

scala

0
推荐指数
1
解决办法
565
查看次数