gpt4 book ai didi

scala - 将列表转换为 map 并在一行中获取项目

转载 作者:行者123 更新时间:2023-12-05 00:25:29 24 4
gpt4 key购买 nike

尝试:

(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编译,所以他们要求你提供隐含的证据证明列表的内容是元组。

通常你不必考虑这个——你只需调用 toMap没有参数,编译器会找到隐含的证据。当你写的东西看起来像是在调用 toMap但是,使用参数会遇到麻烦,因为始终可以显式提供隐式参数。

最简单的解决方法(假设您不想定义单独的变量)是调用 apply明确地。 whatever(foo)只是 whatever.apply(foo) 的语法糖(除非 whatever 是一种方法),如果您编写以下代码,您的代码将编译:
scala> List(('c', 1)).toMap.apply('c')
res0: Int = 1

现在很明显,您并没有尝试调用 toMap使用 c 的方法作为论据。

关于scala - 将列表转换为 map 并在一行中获取项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24173386/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com