gpt4 book ai didi

scala - Tuple2._2 用作 map.apply 中的键

转载 作者:行者123 更新时间:2023-12-01 11:00:36 32 4
gpt4 key购买 nike

在 Scala v2.9.2(和 2.8.0)中,这个脚本:

case class MyString(s: String)
implicit def stringToMyString(s: String) = MyString(s)
implicit val defaults: Map[String, MyString] = Map("abc" -> MyString("123"))

case class HasDefaults(name: String = "none",
baseMap: Map[String, MyString] = Map.empty) {
def add(kvp: (String, MyString)*)(implicit defaults: Map[String, MyString]) =
this.copy(baseMap = this.baseMap ++ defaults ++ kvp)
}

val hasDefaults = HasDefaults() add (
"def" -> "124",
"xyz" -> MyString("999")
)

println(hasDefaults)

失败:

java.util.NoSuchElementException: key not found: 124
at scala.collection.MapLike$class.default(MapLike.scala:224)
at scala.collection.immutable.Map$Map1.default(Map.scala:106)
at scala.collection.MapLike$class.apply(MapLike.scala:135)
at scala.collection.immutable.Map$Map1.apply(Map.scala:106)
at Main$$anon$1.<init>(HasDefaults.scala:12)

它试图将字符串值 "124" 用作 map 查找中的键,即使它被定义为一个值(由于位于 -> 运算符)。

请注意,如果未尝试隐式转换为 MyString,此错误就会消失。例如:

val hasDefaults = HasDefaults().add(
"def" -> MyString("124"),
"xyz" -> MyString("999")
)

注意 #2,如果显式提供隐式参数,错误也会消失。例如:

val hasDefaults = HasDefaults().add(
"def" -> "124",
"xyz" -> MyString("999")
)(Map("abc" -> MyString("123")))

最佳答案

在 Scala 中,Map是一个函数。 ( Map[A, B] <: PartialFunction[A, B] <: A => B 。) 所以 defaults类似于 String 的隐式转换至 MyString .自 defaults不包含 "124" ,您会收到“找不到 key ”错误。

关于scala - Tuple2._2 用作 map.apply 中的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11151015/

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