scala 函数中嵌套函数
函数是Scala语言的重要组成部分。 Scala函数可以具有参数列表,也可以具有返回类型。 因此,第一个令人困惑的事情是函数和方法之间的区别是什么? 区别在于方法只是属于类,特征或单例对象的一种函数。
那么,scala中的功能最酷的是什么? 好吧,您可以在函数内部定义函数(称为局部函数),还可以具有可以传递给其他函数或从其他函数返回的匿名函数。 这篇文章是关于那些被称为函数文字的匿名函数。
如前所述,关于函数文字的很酷的事情之一就是您可以将它们传递给其他函数。 例如,考虑下面的片段,我们在其中将函数传递给List的过滤器函数。
List(1,2,3,4,5).filter((x: Int)=> x > 3)
在这种情况下,函数文字为(x: Int)=> x > 3
这将输出: resX: List[Int] = List(4, 5)
。
=>
称为' 右箭头 '意味着将左边的东西转换为右边的东西。 在此示例中,函数文字只是一个简单的语句(这就是它们通常的样子),但是函数文字可能在由{}
包围的传统函数主体中具有多个语句。 例如,我们可以说:
List(1,2,3,4,5).filter((x: Int)=>{
println('x='+ x);
x > 3;})
这使:
x=1
x=2
x=3
x=4
x=5
resX: List[Int] = List(4, 5)
现在,Scala的关键功能之一就是能够用更少的代码完成更多的工作。 因此,以这种思维方式,让我们看看如何缩短原始函数文字。 首先,我们可以删除参数类型。
List(1,2,3,4,5).filter((x)=> x > 3)
这种技术称为目标键入 。 在这种情况下,表达式的目标用途是允许使用要过滤的内容来确定x参数的类型。
我们可以通过去除括号来进一步减轻手指的压力。 这是因为括号仅在此处显示在参数键入中被称为Int的内容。 但是现在可以推断出是打字,括号是多余的,可以删除。
List(1,2,3,4,5).filter(x => x > 3)
更缩短吗? 是的,肯定...我们可以使用
占位符下划线语法。
List(1,2,3,4,5).filter(_ > 3)
下划线在Scala中具有不同的含义,具体取决于使用的上下文。 在这种情况下,如果您年龄足够大,请回想起奶酪游戏显示的空白。 该游戏节目由句子和空格组成,参赛者必须对空格中的内容提出建议。 在此示例中, filter
函数使用要对其进行调用的列表中的值填充空白。 因此,筛选器功能是一揽子空白竞争者,而列表(1,2,3,4,5)是筛选器功能用来填充空白的内容。
因此,现在我们的代码非常简洁明了。 在Java中要实现相同,它将是:
Iterator<Integer> it = new ArrayList<Integer>(1,2,3,4,5).iterator();
while( it.hasNext() ) {
Integer myInt = it.next();
if(myInt > 3) it.remove();
}
参考:来自都柏林技术博客博客的JCG合作伙伴 Alex Staveley的Scala函数文字 。
翻译自: https://www.javacodegeeks.com/2013/01/scala-function-literals.html
scala 函数中嵌套函数