以下是 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/