Scala的函数

前文已经提到Scala变量的用法,现在聊聊函数。在Scala里,函数的定义很简单。例如:

def add(x: Int, y: Int): Int = {
    x + y
}

Scala的函数和Python一样,以def开头,然后是函数名add,最后指定函数的参数,这里Scala的类型推断就不灵了,需要在冒号后面指定传入的函数参数类型。add函数接受两个为Int类型的参数,返回一个Int类型的结果参数。花括号里是add函数的函数体,负责函数的具体实现。Scala的函数的返回值,不需要指明return。

当然这是最死板的写法,灵活的Scala衍生出了更多的函数定义方式:

  1. 当返回值不是类似于递归这种情况的话,Scala的编译器是可以自动推断出返回值的类型,而不需要特意指定。
def add(x: Int, y: Int) = {
    x + y
}
  1. 当函数只有一条语句时,也可以把花括号省略。
def add(x: Int, y: Int) = x + y

在讨论完Scala函数的定义以后,那么Scala是如何定义函数是一等对象的? 在函数式编程里,函数本身不仅仅可以被定义和调用,也可以被当作值传递。在此之前先引入lambda函数,Scala里称为函数字面量,如下:

scala> (x:Int) => x + 1
res0: Int => Int = <function1>

虽然这个函数字面量还不能使用,但之前已经提到过了,函数本身是可以被当作值传递的,所以可以把上述的函数自变量,传给一个变量:

val increaseOne = (x: Int) => x + 1

与Python的lambda函数只能接受表达式不一样,Scala的lambda函数可以像一般的函数定义体一样定义。

 val increaseOne = (x: Int) => {
       x + 1
    }

这样的用法推广开来,就演变成了下面的用法:

val lst = List(1, 2, 3, 4, 5)
lst.foreach((x:Int) => println(x))

按照Scala能省则省的性格,上面的可以省略为:

lst.foreach(println)

原文发布于微信公众号 - 鸿的学习笔记(shujuxuexizhilu)

原文发表时间:2018-11-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏黑泽君的专栏

java基础学习_面向对象(下)01_day08总结

============================================================================= ==...

8020
来自专栏微信公众号:Java团长

Java基础11 对象引用

我们之前一直在使用“对象”这个概念,但没有探讨对象在内存中的具体存储方式。这方面的讨论将引出“对象引用”(object reference)这一重要概念。

9020
来自专栏Python爱好者

Java基础笔记08

14750
来自专栏Java编程

Java提高篇——详解内部类

可以将一个类的定义放在另一个类的定义内部,这就是内部类。

65400
来自专栏java达人

关于java传参

有一个比较经典的例子,如果你能说出此题的结果,说明你是java内存解析能手: public class Test1 { public static clas...

20670
来自专栏全沾开发(huā)

JavaScript中的比较运算符

JavaScript中的比较运算符 JavaScript中的比较运算符粗略的可以分为两种: 相等运算符(==、===、!==)这些 ...

35470
来自专栏Albert陈凯

Scala之偏函数Partial Function

http://blog.csdn.net/bluishglc/article/details/50995939 从使用case语句构造匿名函数谈起 在Scal...

34290
来自专栏鸿的学习笔记

Python和Scala的一等函数

函数指的是执行某个任务或者是一系列的指令被组织成的一片代码块。标准的数学意义上的函数指的是输入集合和输出集合的一种对应关系。

7310
来自专栏玄魂工作室

Python学习:类和实例

-----------------------------------------------------

17530
来自专栏猿人谷

《C++ primer》--第7章

删除指针后,该指针就变成了悬垂指针。悬垂指针指向曾经存放对象的内存,但该对象已经不再存在了。 习题7.8 举一个例子说明什么时候应该将形参定义为引用类型。再举一...

19850

扫码关注云+社区

领取腾讯云代金券