什么是Scalas Product.productIterator应该做什么?
发布时间:2020-12-16 18:59:07 所属栏目:安全 来源:网络整理
导读:有人能告诉我为什么在下面的代码中使用Tuple2 [List,List]和List [List]作为我的产品时会得到不同的结果吗?具体来说,我想知道为什么列表列表的第二个值被包装在另一个列表中? scala val a = List(1,2,3)a: List[Int] = List(1,3)scala val b = List(4,5,6)
有人能告诉我为什么在下面的代码中使用Tuple2 [List,List]和List [List]作为我的产品时会得到不同的结果吗?具体来说,我想知道为什么列表列表的第二个值被包装在另一个列表中?
scala> val a = List(1,2,3) a: List[Int] = List(1,3) scala> val b = List(4,5,6) b: List[Int] = List(4,6) scala> val c = List(a,b) c: List[List[Int]] = List(List(1,3),List(4,6)) scala> c.productIterator.foreach( println(_) ) List(1,3) List(List(4,6)) // <-- Note this scala> val d = (a,b) d: (List[Int],List[Int]) = (List(1,6)) scala> d.productIterator.foreach( println(_) ) List(1,3) List(4,6) // <-- Compared to this (我已经阅读了Scala产品的描述(绝对最小)和http://www.scala-lang.org/api/current/index.html#scala.Product上的productIterator方法) 解决方法
基本上,元组意味着它的所有元素之间的产品,但非空的List是它的头部和尾部之间的产品.
这种情况发生在List中,因为所有案例类都扩展了Product,并且代表了与元组类似的所有元素之间的产品.并且非空List被定义为一个case类,包含head和tail:final case class :: [B](override val head:B,private [scala] var tl:List [B])extends List [B],它继承了Case by case类的默认实现. 您可以使用包含1个或2个以上元素的其他列表来观察更多此行为: scala> List(a).productIterator.foreach(println) List(1,3) List() scala> List(a,a).productIterator.foreach(println) List(1,3) List(List(1,3)) scala> List(a,a,List(1,3)) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |