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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值