小编Tim*_*Tim的帖子

Martin Odersky的ScalaDay 2011年示例:产生一张地图?

我正在通过Odersky的ScalaDays 2011主题演讲,当我到达这个特定的行(分配charCode)时,他在非常少的代码行中构建了一个电话号码同义词生成器:

val mnem: Map[Char, String] = // phone digits to mnemonic chars (e.g. '2' -> "ABC")
val charCode: Map[Char, Char] = for ((digit, str) <- mnem; letter <- str)
    yield (letter -> digit)   // gives ('A', '2'), ('B', '2') etc
Run Code Online (Sandbox Code Playgroud)

为什么是charCode类型Map

当我在其他例子中产生元组时,我只获得一系列元组 - 而不是地图.例如:

scala> for (i <- 1 to 3) yield (i -> (i+1))
res16: scala.collection.immutable.IndexedSeq[(Int, Int)] = Vector((1,2), (2,3), (3,4))
Run Code Online (Sandbox Code Playgroud)

可以轻松地将其转换为地图toMap(),就像这样......

scala> (for (i <- 1 to …
Run Code Online (Sandbox Code Playgroud)

scala

21
推荐指数
3
解决办法
5513
查看次数

如何匹配Scala"匹配"语句中的类?

如何使用"匹配"语句来标识类变量的值?以下是无效的,我找不到一个可接受的变体 - 除了if ... else if ... else ...

val c: Class[_] = classOf[Int]
val what = c match { case classOf[Int] => "int!"; case classOf[Float] => "float!" }
Run Code Online (Sandbox Code Playgroud)

编译器抱怨: error: not found: type classOf

当然,我无法使用,Class[Int]因为该类型信息被删除:

c match { case Class[Int] => "int!"; case Class[Float] => "float!" }
error: type Class of type Class does not take type parameters.
Run Code Online (Sandbox Code Playgroud)

我也试过各种变体Int.class,但都无济于事.(而且我真的不想转换为字符串:我觉得让编译器捕获重命名/移动的类非常重要.)

我是否密集,或者我偶然发现斯卡拉盲点?

scala

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

与Scala的数字类型比较?

如何创建一个在Scala中对任何数字类型进行数学比较的类?

一个明显的方法:

import math.Numeric.Implicits._

class Ops[T : Numeric] {
    def add(a: T, b: T) = a + b
    def gt(a: T, b: T) = a > b
}
Run Code Online (Sandbox Code Playgroud)

让我知道这个......

Ops.scala:7: value > is not a member of type parameter T
Run Code Online (Sandbox Code Playgroud)

嗯......我们可以用数字类型做数学,但我们无法比较它们?

所以我们也说TOrdered[T]......

class Ops[T <: Ordered[T] : Numeric] {
    def add(a: T, b: T) = a + b
    def gt(a: T, b: T) = a > b
}
Run Code Online (Sandbox Code Playgroud)

编译.但尝试使用它?

new Ops[Int].gt(1, 2)
Run Code Online (Sandbox Code Playgroud)

我明白了......

Ops.scala:13: …
Run Code Online (Sandbox Code Playgroud)

math scala numeric

7
推荐指数
1
解决办法
2716
查看次数

标签 统计

scala ×3

math ×1

numeric ×1