Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 什么';immutable.Map.Map怎么了?_Scala - Fatal编程技术网

Scala 什么';immutable.Map.Map怎么了?

Scala 什么';immutable.Map.Map怎么了?,scala,Scala,它是如何工作的?文档似乎有问题: [用例] 通过将函数应用于此不可变映射的所有元素来构建新集合 完整签名 def map[B, That](f: ((A, B)) ⇒ B)(implicit bf: CanBuildFrom[Map[A, B], B, That]): That Map[B]没有意义,因为Map接受两个类型参数 在完整签名中,B映射的type参数和B映射的type参数之间存在名称冲突 可以理解的混淆源于这样一个事实,即map不是在map中实现的,而是在TraversableL

它是如何工作的?文档似乎有问题:

[用例] 通过将函数应用于此不可变映射的所有元素来构建新集合

完整签名

def map[B, That](f: ((A, B)) ⇒ B)(implicit bf: CanBuildFrom[Map[A, B], B, That]): That
  • Map[B]
    没有意义,因为
    Map
    接受两个类型参数
  • 在完整签名中,
    B
    映射的type参数和
    B
    映射的type参数之间存在名称冲突

    • 可以理解的混淆源于这样一个事实,即
      map
      不是在
      map
      中实现的,而是在
      TraversableLike
      中实现的。但是,中的函数文档由子类继承

      TraversableLike
      接受两个类型参数
      TraversableLike[+A,+Repr]
      并且map函数具有签名
      TraversableLike.map[B](f:(A)⇒ B) :可遍历[B]
      。在
      Map
      的api文档中,该文档由
      Map[B]
      继承并部分调整
      Traversable[B]
      ,但是
      B
      来自
      TraversableLike
      未解析为
      (A,B)
      表单
      Map

      (可能是Scaladoc中的一个bug,可能无法修复,因为可能存在擦除问题。但这只是我的猜测。)

      如果您在成员文档的正上方配置了成员的可见性,则可以检查
      Map
      中实际实现的内容

      编辑:

      现在谈谈你的核心问题:

      如果文档能给我们提供直观的信息

      如果我们为了可读性把它简化一点

      如果我们进一步使用自然语言而不是首字母缩略词,那么a
      map[a,B]
      的map签名可能如下所示:

      map[ResultItem, ResultCollection](f: (A,B) => ResultItem)(implicit bf: CanBuildFrom[Map[A, B], ResultItem, ResultCollection]): ResultCollection
      
      因此,基本上您对
      Map
      的每个键值对应用一个函数,该函数将类型(a,B)的键值对转换为类型
      ResultType
      的值

      由于可以从映射(或任何其他集合)构建几乎任何类型的集合,因此此结果类型不必是另一个元组。而且
      ResultCollection
      不必是另一个
      Map
      。例如:

      Map("1" -> 1, "2" -> 2).map((keyValuePair: (String, Int)) => keyValuePair._2)
      
      或短

      Map("1" -> 1, "2" -> 2).map(_._2)
      
      列表(1,2)
      作为结果,将
      列表[Int]
      作为结果集合,将
      Int
      作为结果项

      这是可能的,因为implicit
      CanBuildFrom
      参数添加了一个隐式生成器,该生成器获取map函数的结果并将其附加到其生成器结果。在大多数情况下,
      CanBuildFrom
      是由编译器推断出来的。但是,在某些情况下,它无法推断正确的结果集合

      在这种情况下,您必须向编译器提供更多信息:

      val test2: Vector[Int] = Map("1" -> 1, "2" -> 2).map(_._2)(collection.breakOut)
      val test3: Set[Int] = Map("1" -> 1, "2" -> 2).map(_._2)(collection.breakOut)
      

      关于
      breakOut
      CanBuildFrom
      的更多信息,我建议可以理解的混淆源于
      map
      不是在
      map
      中实现的,而是在
      TraversableLike
      中实现的。但是,中的函数文档由子类继承

      TraversableLike
      接受两个类型参数
      TraversableLike[+A,+Repr]
      并且map函数具有签名
      TraversableLike.map[B](f:(A)⇒ B) :可遍历[B]
      。在
      Map
      的api文档中,该文档由
      Map[B]
      继承并部分调整
      Traversable[B]
      ,但是
      B
      来自
      TraversableLike
      未解析为
      (A,B)
      表单
      Map

      (可能是Scaladoc中的一个bug,可能无法修复,因为可能存在擦除问题。但这只是我的猜测。)

      如果您在成员文档的正上方配置了成员的可见性,则可以检查
      Map
      中实际实现的内容

      编辑:

      现在谈谈你的核心问题:

      如果文档能给我们提供直观的信息

      如果我们为了可读性把它简化一点

      如果我们进一步使用自然语言而不是首字母缩略词,那么a
      map[a,B]
      的map签名可能如下所示:

      map[ResultItem, ResultCollection](f: (A,B) => ResultItem)(implicit bf: CanBuildFrom[Map[A, B], ResultItem, ResultCollection]): ResultCollection
      
      因此,基本上您对
      Map
      的每个键值对应用一个函数,该函数将类型(a,B)的键值对转换为类型
      ResultType
      的值

      由于可以从映射(或任何其他集合)构建几乎任何类型的集合,因此此结果类型不必是另一个元组。而且
      ResultCollection
      不必是另一个
      Map
      。例如:

      Map("1" -> 1, "2" -> 2).map((keyValuePair: (String, Int)) => keyValuePair._2)
      
      或短

      Map("1" -> 1, "2" -> 2).map(_._2)
      
      列表(1,2)
      作为结果,将
      列表[Int]
      作为结果集合,将
      Int
      作为结果项

      这是可能的,因为implicit
      CanBuildFrom
      参数添加了一个隐式生成器,该生成器获取map函数的结果并将其附加到其生成器结果。在大多数情况下,
      CanBuildFrom
      是由编译器推断出来的。但是,在某些情况下,它无法推断正确的结果集合

      在这种情况下,您必须向编译器提供更多信息:

      val test2: Vector[Int] = Map("1" -> 1, "2" -> 2).map(_._2)(collection.breakOut)
      val test3: Set[Int] = Map("1" -> 1, "2" -> 2).map(_._2)(collection.breakOut)
      

      有关
      breakOut
      CanBuildFrom
      的更多信息,我建议

      我理解文档有问题,但您没有回答我问题的核心:“immutable.Map.Map如何工作?”我理解文档有问题,但您没有回答我问题的核心:“immutable.Map.Map如何工作?”