加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 将列表转换为地图并在一行中获取项目

发布时间:2020-12-16 18:12:42 所属栏目:安全 来源:网络整理
导读:尝试: (List(('c',1)).toMap)('c') 错误: found : Char('c')required: :[(Char,Int),(?,?)] 但是,这很好用: val m = List(('c',1)).toMapm('c') // gives 1 as expected 为什么首先将它存储在变量中是否重要?这可能是个错误吗? 解决方法 问题是toMap的
尝试:

(List(('c',1)).toMap)('c')

错误:

found   : Char('c')
required: <:<[(Char,Int),(?,?)]

但是,这很好用:

val m = List(('c',1)).toMap
m('c') // gives 1 as expected

为什么首先将它存储在变量中是否重要?这可能是个错误吗?

解决方法

问题是toMap的完整签名如下:

def toMap[T,U](implicit ev: <:<[A,(T,U)]): Map[T,U]

集合API设计者不希望List(1).toMap进行编译,因此它们要求您提供隐式证据,证明列表的内容是元组.

通常你不必考虑这个 – 你只需要在没有参数的情况下调用Map,编译器会找到隐含的证据.当你写一些看起来像是用参数调用map的东西时,你会遇到麻烦,因为它总是可以明确地提供隐式参数.

最简单的解决方法(假设您不想定义单独的变量)是显式调用apply.无论(foo)只是what.apply(foo)的语法糖(除非是一个方法),如果你编写以下内容,你的代码将编译:

scala> List(('c',1)).toMap.apply('c')
res0: Int = 1

现在很清楚你没有尝试用c作为参数来调用toMap方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读