为什么在scala中向后使用concat运算符?

凯文

按比例 repl

scala> List(1) :: 2
<console>:8: error: value :: is not a member of Int
          List(1) :: 2

scala> 2 :: List(1);
res4: List[Int] = List(2, 1)

这是反直观的,因为如果从左到右读取中缀运算符,则上述行可以转换为

List(1) :: 2
List(1).::(2) 

2 :: List(1)
2.::(List(1))

我会想象一个Int没有::而一个List没有的方法我是在假设什么地方吗?

尤瓦尔·伊茨恰科夫(Yuval Itzchakov)

这是反直观的,因为如果从左到右读取中缀运算符

如果您考虑一下,从逻辑上讲,这是很有意义的。::(缺点)运营商预先考虑的值到列表的开头,它不添加它到列表的末尾。当您这样考虑时,::运算符是正确的关联这一事实很有意义,因为它会将元素粘贴到的开头List

scala> 4 :: List(3,2,1)
res1: List[Int] = List(4, 3, 2, 1)

内部实现非常简单:

def ::[B >: A] (x: B): List[B] =
  new scala.collection.immutable.::(x, this)

List在内部以LinkedList的形式实现,该列表包含一个head(头),该头是集合中的第一个元素,以及一个剩余元素的列表,它们是tail。这就是为什么前置元素比附加元素便宜得多的原因,因为它需要对内部列表进行O(n)遍历才能复制元素,并附加新值。

尽管很昂贵,您仍然可以使用:+运算符来实现它,它仍然关联的

scala> List(1,2,3) :+ 4
res3: List[Int] = List(1, 2, 3, 4)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么“ as”运算符在C#中不使用隐式转换运算符?

来自分类Dev

如何使用!Scala中的运算符?

来自分类Dev

Scala什么是<:<运算符

来自分类Dev

为什么scala地图上没有::运算符?

来自分类Dev

为什么在Java中存在按位运算符时使用逻辑运算符

来自分类Dev

为什么在scala中创建地图不需要并允许新的运算符?

来自分类Dev

在Scala中,为什么余数(%)运算符会返回负数?

来自分类Dev

为什么在scala中创建地图不需要并允许新的运算符?

来自分类Dev

为什么在Scala中使用'〜'运算符会给我一个负值

来自分类Dev

Scala中的“ =>”运算符

来自分类Dev

为什么加号运算符在Julia中是矢量化的,而不是除法运算符?

来自分类Dev

当在Angular中串联多个HttpClient调用时,为什么concat RxJS运算符会发出Observable而不是值

来自分类Dev

为什么map.find使用<运算符而不是==运算符?

来自分类Dev

为什么在使用“不等于”时,if运算符或运算符不起作用?

来自分类Dev

运算符“:\”在此scala代码中做什么?

来自分类Dev

为什么在使用scanf之后使用&运算符?

来自分类Dev

为什么在使用||时使用“意外的“。”” 括号中默认值的运算符

来自分类Dev

python中的幂运算符(**)转换为什么?

来自分类Dev

为什么scheme中的`and`运算符不是内置过程

来自分类Dev

为什么在教堂中“减少”中缀运算符?

来自分类Dev

为什么在运算符重载中需要引用?

来自分类Dev

为什么+运算符在Powershell中增加空间

来自分类Dev

为什么<< ofstream中的运算符不是const?

来自分类Dev

为什么和 vb.net 中的运算符

来自分类Dev

为什么我的模板运算符==不被使用?

来自分类Dev

为什么不能对类使用运算符重载?

来自分类Dev

为什么要使用零容忍运算符?

来自分类Dev

为什么 '?' 运算符使用From而不是Into?

来自分类Dev

为什么/何时应该使用c ++中的作用域运算符在类之外声明方法?

Related 相关文章

  1. 1

    为什么“ as”运算符在C#中不使用隐式转换运算符?

  2. 2

    如何使用!Scala中的运算符?

  3. 3

    Scala什么是<:<运算符

  4. 4

    为什么scala地图上没有::运算符?

  5. 5

    为什么在Java中存在按位运算符时使用逻辑运算符

  6. 6

    为什么在scala中创建地图不需要并允许新的运算符?

  7. 7

    在Scala中,为什么余数(%)运算符会返回负数?

  8. 8

    为什么在scala中创建地图不需要并允许新的运算符?

  9. 9

    为什么在Scala中使用'〜'运算符会给我一个负值

  10. 10

    Scala中的“ =>”运算符

  11. 11

    为什么加号运算符在Julia中是矢量化的,而不是除法运算符?

  12. 12

    当在Angular中串联多个HttpClient调用时,为什么concat RxJS运算符会发出Observable而不是值

  13. 13

    为什么map.find使用<运算符而不是==运算符?

  14. 14

    为什么在使用“不等于”时,if运算符或运算符不起作用?

  15. 15

    运算符“:\”在此scala代码中做什么?

  16. 16

    为什么在使用scanf之后使用&运算符?

  17. 17

    为什么在使用||时使用“意外的“。”” 括号中默认值的运算符

  18. 18

    python中的幂运算符(**)转换为什么?

  19. 19

    为什么scheme中的`and`运算符不是内置过程

  20. 20

    为什么在教堂中“减少”中缀运算符?

  21. 21

    为什么在运算符重载中需要引用?

  22. 22

    为什么+运算符在Powershell中增加空间

  23. 23

    为什么<< ofstream中的运算符不是const?

  24. 24

    为什么和 vb.net 中的运算符

  25. 25

    为什么我的模板运算符==不被使用?

  26. 26

    为什么不能对类使用运算符重载?

  27. 27

    为什么要使用零容忍运算符?

  28. 28

    为什么 '?' 运算符使用From而不是Into?

  29. 29

    为什么/何时应该使用c ++中的作用域运算符在类之外声明方法?

热门标签

归档