type A=B不等于import {A=>B}

        本文是在“Scala热情交流群(132569382)”的讨论中整理而成。

        当程序需要使用scala.collection.mutable.Map的时候,可以通过导入(import)语法: 
import scala.collection.mutable.{ Map => MMap }

然后这样使用:
val map = MMap[String,String]()

能否改成这样呢?
type Kap[K,V] = scala.collection.mutable.Map[K,V]
val  data = MMap[String,String]()

结果发现编译报错,提示 "not found: value KMap"
 

KMap明明已经定义了,为什么找不到呢?    实际上 import scala.collection.mutable.{ Map => MMap }是把 scala.collection.mutable.Map的特征(trait)和伴随对象(companion object)一起导入了. 当你这样使用的时候:

def func(map: MMap[String,String])  = {
   // ...
}

Scala知道MMap是一个特征的别名,当你这样使用的时候:

val map = MMap[String,String]()

Scala知道你是调用了伴随对象scala.collection.mutable.Map的apply()方法,然后用变量map保存apply()的结果(注意:如果写成MMap[String,String],则是把伴随对象scala.collection.mutable.Map的引用赋值给变量map); 而 type KMap[K,V] = scala.collection.mutable.Map[K,V] 只是给特征取个别名,因此标识符KMap只能用于类型声明,比如

val map: KMap[String,String] = null;
def func(map: kMap[String,String] ) = null

        
        PS: 如果大家对Scala有浓厚的性趣,欢迎加入群132569382。在这里感谢风自由和唐古拉山提供讨论的素材。

转载于:https://my.oschina.net/aiguozhe/blog/35198

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值