Scala 列表和映射的隐式值行为 "Lookups"

标签 scala implicit-conversion implicit

我在 Scala 讲座视频中看到一位演讲者提到的 List 行为。然后我想我可以用 map 来尝试一下。此外,通过/通过另一种类型查看类型的相同分辨率。

我很好奇这个决议是如何运作的?这是 Scala 语言/编译器团队有意为之的吗?出现了感兴趣的怪癖吗?这个功能在 Dotty 中的功能是否相同,但语法不同? List 和 Map 的定义方式有什么特别之处吗?基本上我可以像函数一样执行并将一种类型交换为另一种类型?

这里有一些示例代码来说明我正在谈论的内容:

  // I'm being verbose to stress the types
  implicit val theList: List[String] = List("zero", "one", "two", "three")
  implicit val theMap: Map[Double, String] = Map(1.1 -> "first", 2.1 -> "second")

  def doExample(v: String): Unit = {
    println(v)
  }

  doExample(1)
  // prints "one"
  doExample(1.1)
  // prints "first"

最佳答案

我想是因为

implicitly[List[String] <:< (Int => String)]             // ok
implicitly[Map[Double, String] <:< (Double => String)]   // ok

所以以下内容是有效的

val x: Int => String = List("zero", "one", "two", "three")
val y: Double => String = Map(1.1 -> "first", 2.1 -> "second")

x(1)
y(1.1)
// val res5: String = one
// val res6: String = first 

关于Scala 列表和映射的隐式值行为 "Lookups",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62457201/

相关文章:

amazon-web-services - 使用 AWS glue 合并多个 Parquet 文件并在 s3 中创建更大的 Parquet 文件

找不到 Scala : value macro

scala - java.lang.String 不是字符串模式的有效外部类型

scala - 使用 TraversableLike 定义的类型类不适用于 List

隐式类中的 Scala 按名称调用构造函数参数

parsing - Scala 的 ANTLR 语法?

c++ - 通过隐式转换为字符串流式传输对象时重载解析失败

c - 与负数比较时,为什么 sizeof 运算符会发生这种情况?

c++ - 类转换(有点复制)构造函数到类的指针

scala - 如何使用 HList 现有成员创建类型类