这篇文章主要讲解了“Scala函数文本的短格式和占位符语法的用法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Scala函数文本的短格式和占位符语法的用法”吧!
函数文本的短格式
Scala提供了许多方法去除冗余信息并把函数文本写得更简短。注意留意这些机会,因为它们能让你去掉代码里乱七八糟的东西。
一种让函数文本更简短的方式是去除参数类型。因此,前面带过滤器的例子可以写成这样:
scala> someNumbers.filter((x) => x > 0) res7: List[Int] = List(5, 10)
Scala编译器知道x一定是整数,因为它看到你立刻使用了这个函数过滤整数列表(由someNumbers暗示)。这被称为目标类型化:target typing,因为表达式的目标使用——本例中someNumbers.filter()的参数——影响了表达式的类型化——本例中决定了x参数的类型。目标类型化的精确细节并不重要。你可以简单地从编写一个不带参数类型的函数文本开始,并且,如果编译器不能识别,再加上类型。几次之后你就对什么情况编译器能或不能解开谜题有感觉了。
第二种去除无用字符的方式是省略类型是被推断的参数之外的括号。前面例子里,x两边的括号不是必须的:
scala> someNumbers.filter(x => x > 0) res8: List[Int] = List(5, 10)
占位符语法
如果想让函数文本更简洁,可以把下划线当做一个或更多参数的占位符,只要每个参数在函数文本内仅出现一次。比如,_ > 0对于检查值是否大于零的函数来说就是非常短的标注:
scala> someNumbers.filter(_ > 0) res9: List[Int] = List(5, 10)
你可以把下划线看作表达式里需要被“填入”的“空白”。这个空白在每次函数被调用的时候用函数的参数填入。例如,由于someNumbers在第113页被初始化为值List(-11, -10, -5, 0, 5, 10),filter方法会把_ > 0里的空格首先用-11替换,就如-11 > 0,然后用-10替换,如-10 > 0,然后用-5,如-5 > 0,这样直到List的***一个值。因此,函数文本_ > 0与稍微冗长一点儿的x => x > 0相同,演示如下:
scala> someNumbers.filter(x => x > 0) res10: List[Int] = List(5, 10)
有时你把下划线当作参数的占位符时,编译器有可能没有足够的信息推断缺失的参数类型。例如,假设你只是写_ + _:
scala> val f = _ + _ < console>:4: error: missing parameter type for expanded function ((x$1, x$2) => x$1.$plus(x$2)) val f = _ + _ ˆ
这种情况下,你可以使用冒号指定类型,如下:
scala> val f = (_: Int) + (_: Int) f: (Int, Int) => Int = < function> scala> f(5, 10) res11: Int = 15
请注意_ + _将扩展成带两个参数的函数文本。这也是仅当每个参数在函数文本中最多出现一次的情况下你才能使用这种短格式的原因。多个下划线指代多个参数,而不是单个参数的重复使用。***个下划线代表***个参数,第二个下划线代表第二个,第三个……,如此类推。
感谢各位的阅读,以上就是“Scala函数文本的短格式和占位符语法的用法”的内容了,经过本文的学习后,相信大家对Scala函数文本的短格式和占位符语法的用法这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。