加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

什么是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))

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读