RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 590711
Accepted
DedRain
DedRain
Asked:2020-11-14 16:04:39 +0000 UTC2020-11-14 16:04:39 +0000 UTC 2020-11-14 16:04:39 +0000 UTC

产品特征的逻辑和目的

  • 772

面临着不理解 trait Product 是如何工作的问题。例子:

List(1,2).productIterator.toList

回报

List[Any] = List(1, List(2))

翻阅文档后,我还没有找到为什么第二个元素作为列表 (2) 而不仅仅是 2 返回的问题的答案。谢谢。

scala
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    EnverOsmanov
    2020-11-25T23:01:37Z2020-11-25T23:01:37Z

    首先,我将解释它是什么List,然后我将解释它是如何工作productIterator的。

    所以List- 这是一个抽象类,这意味着您不能创建它的实例。看起来像是List他的继承人之一。该类有List两个后代——案例类::和案例对象Nil。

    让我们看看它们的实现:

    final case class ::[B](override val head: B, private[scala] var tl: List[B]) extends List[B] {
      override def tail : List[B] = tl
      override def isEmpty: Boolean = false
    }
    
    case object Nil extends List[Nothing] {
      override def isEmpty = true
      override def head: Nothing =
        throw new NoSuchElementException("head of empty list")
      override def tail: List[Nothing] =
        throw new UnsupportedOperationException("tail of empty list")
      // Removal of equals method here might lead to an infinite recursion similar to IntMap.equals.
      override def equals(that: Any) = that match {
        case that1: scala.collection.GenSeq[_] => that1.isEmpty
        case _ => false
      }
    }
    

    很多人都知道Nil这是一个空列表,那么我们来考虑case类::。如您所见,它有两个字段 -head和tl. 请注意,它head是单个元素并且tl是一个 collection( List)。那些。当我们写

    List(1)
    

    实际上,创建了这样一个案例类:

    ::(1, Nil)
    ::(head = 1, tl = Nil)//тоже самое с именованными параметрами
    

    当你创建时List(1, 2),它实际上创建了这样的东西:

    ::(1, ::(2, Nil))
    
    ::(head = 1, tl = ::(2, Nil)) //тоже самое с именованными параметрами
    

    注意第二个参数是 type 的事实List,这意味着无论你传递(::或Nil)什么后继者 - 它都将显示为List.

    现在 pro productIterator,此方法返回类参数的迭代器。在我们的例子中,对象Nil没有参数,类::只有两个参数——head和tl。你可以看到他们的意思。

    PSproductIterator他们有一个方法——因为他们是一个案例类和一个案例对象。

    有用的材料:

    • http://www.alessandrolacava.com/blog/scala-case-classes-in-depth/
    • http://www.scala-lang.org/api/current/scala/collection/immutable/List.html
    • 斯卡拉源
    • 5

相关问题

  • 如何在 Scala 中正确获取行号、方法/函数、类、包等?

  • 从 scala/playframework 2.5 配置文件中读取

  • Scala 编程环境叫什么?[关闭]

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何停止编写糟糕的代码?

    • 3 个回答
  • Marko Smith

    onCreateView 方法重构

    • 1 个回答
  • Marko Smith

    通用还是非通用

    • 2 个回答
  • Marko Smith

    如何访问 jQuery 中的列

    • 1 个回答
  • Marko Smith

    *.tga 文件的组重命名(3620 个)

    • 1 个回答
  • Marko Smith

    内存分配列表C#

    • 1 个回答
  • Marko Smith

    常规赛适度贪婪

    • 1 个回答
  • Marko Smith

    如何制作自己的自动完成/自动更正?

    • 1 个回答
  • Marko Smith

    选择斐波那契数列

    • 2 个回答
  • Marko Smith

    所有 API 版本中的通用权限代码

    • 2 个回答
  • Martin Hope
    jfs *(星号)和 ** 双星号在 Python 中是什么意思? 2020-11-23 05:07:40 +0000 UTC
  • Martin Hope
    hwak 哪个孩子调用了父母的静态方法?还是不可能完成的任务? 2020-11-18 16:30:55 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    Arch ArrayList 与 LinkedList 的区别? 2020-09-20 02:42:49 +0000 UTC
  • Martin Hope
    iluxa1810 哪个更正确使用:if () 或 try-catch? 2020-08-23 18:56:13 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5