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方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |