首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala:为什么l1 : l2不等于l1.:(L2)?

Scala:为什么l1 : l2不等于l1.:(L2)?
EN

Stack Overflow用户
提问于 2014-05-22 03:34:35
回答 2查看 339关注 0票数 1

这是我的代码:

代码语言:javascript
复制
    val l1 = List(1,2,3)
    val l2 = List(4,5,6)
    val l1l2_1 = l1 ::: l2
    val l1l2_2 = l1.:::(l2)
    val l1l2_3 = l2.:::(l1)
    println(s"l1 = $l1 \nl2 = $l2 \nl1 ::: l2  = $l1l2_1 \nl1.:::(l2) = $l1l2_2 \nl2.:::(l1) = $l1l2_3 }")

这是输出:

代码语言:javascript
复制
l1 = List(1, 2, 3) 
l2 = List(4, 5, 6) 
l1 ::: l2  = List(1, 2, 3, 4, 5, 6) 
l1.:::(l2) = List(4, 5, 6, 1, 2, 3) 
l2.:::(l1) = List(1, 2, 3, 4, 5, 6) }

为什么l1 : l2不等于l1。:(L2)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-22 03:40:53

:结尾的操作符与其他操作符不同。当与infix符号一起使用时,它们会反转它们的参数--在右边的参数上调用该方法,而左边的参数被用作参数。所以l1 ::: l2l2.:::(l1)是一样的。

票数 4
EN

Stack Overflow用户

发布于 2014-05-22 07:53:25

原因是Scala中的两条规则:

  1. :算子/方法是正确结合的。
  2. 运算符/方法的相联性由运算符名称中的最后一个字符决定。

例如:

任何具有任意名称但以:结尾的方法

代码语言:javascript
复制
def myMethod:(a: Any)

被视为一个:,因此x myMethod: y也是正确的关联,并且执行起来像y.myMethod:(x)

阅读Scala书中编程的更多内容:基本类型和操作

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23797396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档