前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Scala的函数

Scala的函数

作者头像
哒呵呵
发布2018-12-18 16:45:51
4110
发布2018-12-18 16:45:51
举报
文章被收录于专栏:鸿的学习笔记鸿的学习笔记

前文已经提到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)
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-11-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 鸿的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档