相关疑难解决方法(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不允许List.map _并在REPL中键入签名

背景

我最近参加了一个初学者Scala聚会,我们正在谈论方法和功能之间的区别(这里也进行了深入讨论).

例如:

scala> val one = 1
one: Int = 1

scala> val addOne = (x: Int) => x + 1
addOne: Int => Int = <function1>
Run Code Online (Sandbox Code Playgroud)

这表明val不仅可以具有整数类型,而且可以具有函数类型.我们可以在scala repl中看到类型:

scala> :type addOne
Int => Int
Run Code Online (Sandbox Code Playgroud)

我们还可以在对象和类中定义方法:

scala> object Foo {
 |   def timesTwo(op: Int) = op * 2
 | }
defined module Foo
Run Code Online (Sandbox Code Playgroud)

虽然方法没有类型(但是具有类型签名),我们可以将其提升为函数以查看它是什么:

scala> :type Foo.timesTwo
<console>:9: error: missing arguments for method timesTwo in object Foo;
follow this method with `_' if you want to treat …
Run Code Online (Sandbox Code Playgroud)

scala

4
推荐指数
1
解决办法
441
查看次数

标签 统计

scala ×2

scala-2.8 ×1

scala-collections ×1