为了账号安全,请及时绑定邮箱和手机立即绑定

Scala的所有符号运算符是什么意思?

Scala的所有符号运算符是什么意思?

弑天下 2019-10-23 15:19:36
Scala语法有很多符号。由于使用搜索引擎很难找到这类名称,因此将其完整列出会很有帮助。Scala中的所有符号都是什么,它们每个都做什么?我特别想知道->,||=,++=,<=,_._,::,和:+=。
查看完整描述

3 回答

?
慕码人2483693

TA贡献1860条经验 获得超9个赞

您可以根据某些条件先将它们分组。在本文中,我将仅说明下划线字符和右箭头。


_._包含句点。Scala中的句点始终表示方法调用。因此,在句号的左边有接收方,在消息的右边(方法名)。现在_是Scala中的特殊符号。关于它有几篇文章,例如此博客条目所有用例。在这里,这是一个匿名函数的捷径,这是一个接受一个参数并_在其上调用方法的函数的快捷方式。现在_不是有效的方法,因此很可能您已经看到_._1或类似的东西,即_._1在函数参数上调用方法。_1to _22是提取元组特定元素的元组方法。例:


val tup = ("Hallo", 33)

tup._1 // extracts "Hallo"

tup._2 // extracts 33

现在,假设函数应用程序快捷方式的用例。给定一个将整数映射到字符串的映射:


val coll = Map(1 -> "Eins", 2 -> "Zwei", 3 -> "Drei")

糟糕,标点符号已经再次出现。连字符和大于号字符(类似于右箭头)是产生的运算符Tuple2。因此,无论编写(1, "Eins")或的结果都没有区别1 -> "Eins",只是后者更易于阅读,尤其是在像地图示例这样的元组列表中。该->是什么神奇的,它是像其他一些运营商,可因为你把所有的隐式转换的对象scala.Predef范围。这里发生的转换是


implicit def any2ArrowAssoc [A] (x: A): ArrowAssoc[A] 

哪里ArrowAssoc有->创建的方法Tuple2。因此1 -> "Eins"是实际的呼叫Predef.any2ArrowAssoc(1).->("Eins")。好。现在回到带有下划线字符的原始问题:


// lets create a sequence from the map by returning the

// values in reverse.

coll.map(_._2.reverse) // yields List(sniE, iewZ, ierD)

这里的下划线缩短了以下等效代码:


coll.map(tup => tup._2.reverse)

请注意,mapMap 的方法将键和值的元组传递给函数参数。因为我们只对值(字符串)感兴趣,所以我们使用_2元组上的方法提取它们。


查看完整回答
反对 回复 2019-10-23
  • 3 回答
  • 0 关注
  • 681 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信