scala定义函数的几种方式

    scala是面向对象的语言,同时也是函数式编程语言。函数在scala中是一等公民,它和变量一样,既可以作为其他函数的参数,也可以将函数赋值给一个变量。

    在scala中定义函数有很多方式,不熟悉scala的同学初看之时难免被搞得晕头转向。这里,我试图按照函数是否有返回值来总结一下函数定义的规律,仅供参考。

    一、有返回值的函数定义:

    1、标准形式(就是函数形参,返回类型,return语句全有)

    def addInt(a:Int, b:Int):Int = {

        var total:Int = a + b

        return total

    }

    括号里是形参,冒号后面是返回类型,大括号里是函数体。

    注意,有返回值的函数定义在大括号前必须有等号,不能省略。

    2、省略返回类型和return

    当有返回值的时候,可以不显式写出返回类型,scala会自动判断。同时return也可以省略。上面的函数可以简写成:

    

    def addInt(a:Int, b:Int) = {

        a + b

    }

    scala自动返回函数体中最后一个表达式的值并判断类型。这里再多说一句,在java中例如x=1这样的表达式返回的是1,而在scala中赋值语句返回的是空值。所以,如果你想返回值,不要以赋值语句作为最后一条语句。

    3、省略大括号

    当函数体只有一行语句的时候,可以省略大括号。上面的函数可以再简写成:

    def addInt(x:Int, y:Int)  = a + b

    怎么样,是不是比java简洁很多。

    上面3种情况是有返回值的,下面说说无返回值的,更简单。

    二、无返回值的函数定义

    1、显式标识无返回值

    def retrunNone(a:Int,b:Int):Unit = {

        print(a + b)

    }

    Unit关键字表示函数无返回值。

  2、省略Unit

    和有返回值类似,这里也可以省略Unit,让scala自己去知道这个函数无返回值。那么它是怎么知道的呢?就是省略等号。当函数定义没有等号的时候,scala认为这个函数无返回值。

   

    def retrunNone(a:Int,b:Int){

        print(a + b)

    }

    最后,我们说说也是经常会看到的一种函数定义——匿名函数。

    匿名函数顾名思义,就是没有名字的函数。它可以作为函数的参数,也可以直接赋值给变量。

    val addInt = (x:Int,y:Int)=> x + y  //将一个函数赋值给变量,调用的时候addInt(1,2)

    def myFun(f : (Int,Int) => Int, x:Int, y:Int) = f(x,y) 

    上面这个函数定义了一个匿名函数作为函数的参数,这个匿名函数有两个Int的参数,返回类型是Int。

    调用的时候我们可以将任何满足匿名函数条件的函数传入,比如addInt。

    那么就是myFun(addInt, 1, 2),返回的是3。

    好了,函数定义就先说这么多,欢迎关注后续文章。

    

    

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值