转换为Map和访问元素的简洁语法

时间:2019-04-04 14:38:23

标签: scala syntax

我想以语法上最正确,最直接的方式访问转换为Map的列表的值。我似乎缺少了一些东西,例如

val lit = List(('a',1), ('b',2), ('c',3))
val m = lit.toMap
println( m('c') )

显然可以正常工作,打印3。

但是

println( lit.toMap ('b') )

出现“类型不匹配”失败,无论我试图在lit.toMap表达式两边加括号。我一定很想念一些愚蠢的东西,但这是什么?

1 个答案:

答案 0 :(得分:2)

List.toMap在编写时采用隐式参数

lit.toMap

它将被编译为

lit.toMap(Predef.$conforms[(Char, Int) <:< (Char, Int)])

因此,如果将()放在toMap之后,则无论lit.toMap()还是(lit.toMap)(),Scala编译器都希望您传入 implicit 参数明确地,因此您需要编写:

lit.toMap(implicitly[(Char, Int) <:< (Char, Int)])('b')

lit.toMap.apply('b')