scala - 在scala中同时定义类型和值别名

标签 scala

以下是 Scala Cookbook 中的示例:

package com.alvinalexander.myapp

package object model {

    // field
    val MAGIC_NUM = 42

    // method
    def echo(a: Any) { println(a) }

    // enumeration
    object Margin extends Enumeration {
        type Margin = Value
        val TOP, BOTTOM, LEFT, RIGHT = Value
    }

    // type definition
    type MutableMap[K, V] = scala.collection.mutable.Map[K, V]
    val MutableMap = scala.collection.mutable.Map

}

这两行不是做同样的事情吗?

    type MutableMap[K, V] = scala.collection.mutable.Map[K, V]
    val MutableMap = scala.collection.mutable.Map

或者,我不能

import scala.collection.mutable.{Map => MutableMap}

最佳答案

Aren't these two lines doing the same thing?

type MutableMap[K, V] = scala.collection.mutable.Map[K, V]
val MutableMap = scala.collection.mutable.Map

他们不是。 type MutableMap[K, V] = scala.collection.mutable.Map[K, V] 是类型别名。

scala> val m: MutableMap[String, Int] = scala.collection.mutable.Map("a" -> 1)
m: MutableMap[String,Int] = Map(a -> 1)

但是以下内容不能单独使用类型别名:

scala> val m: MutableMap[String, Int] = MutableMap("a" -> 1)
<console>:11: error: not found: value MutableMap
       val m: MutableMap[String, Int] = MutableMap("a" -> 1)
                                        ^

val MutableMap = scala.collection.mutable.Map 只是创建 mutable.Map 伴生对象的副本。也就是说,它是一个值,而不是一个类型。它本身也无法工作:

scala> val m: MutableMap[String, Int] = MutableMap("a" -> 1)
<console>:11: error: not found: type MutableMap
       val m: MutableMap[String, Int] = MutableMap("a" -> 1)
              ^

简而言之,区别在于,一个用于类型,一个用于

import scala.collection.mutable.{Map => MutableMap} 将为类型和值(伴随对象)指定别名。一般来说,这就是您想要的。

关于scala - 在scala中同时定义类型和值别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32504912/

相关文章:

scala - (尾)递归函数上的 CPS/Continuations StackOverflowError

scala - 将字符串格式的科学记数法转换为 Spark 数据帧中的数字

scala - 用Scala中的占位符替换字符串中的值

java - 使用 GenericRecord 在 Avro 中用数组填充嵌套记录

Scala 的 Stream 和 StackOverflowError

scala - 我应该创建特征来表示模型的枚举值吗?

Scala:没有getter就不能写setter?

scala - 如何在 Spark 中使用 BLAS 库?

algorithm - Scala 提取列表中相差 1 (Ints) 的邻居

json - DataType.fromJson() 错误 : java. lang.IllegalArgumentException:无法将 JSON 字符串 'int' 转换为数据类型