0%

scala函数

scala函数

在scala中,方法和函数几乎可以等同(定义、使用、运行机制都一样的),只是函数的使用方式更加的灵活多样,函数像变量一样,既可以作为函数的参数使用,也可以将函数赋值给一个变量,函数的创建不用依赖于类或者对象,而在Java当中,函数的创建则要依赖于类、抽象类或者接口

基本语法

1
2
3
4
5
6
7
8
// 函数声明的关键字是def
def 函数名 ([参数名: 参数类型], ...)[[: 返回值类型] =] {

函数体

return 返回值

}

函数可以有返回值,也可以没有

  • 返回值形式1 指明返回值类型,使用:返回值类型=

    1
    2
    3
    def add(a: Int, b: Int): Int = {
    return a + b;
    }
  • 返回值形式2 =表示返回值类型不确定,使用类型推导完成 (在这里注意返回值不能明确使用return,否则无法进行自动推断,必须使用:返回值类型= 来明确指出返回值类型)

    1
    2
    3
    def add1(a: Int, b: Int) = {
    a + b;
    }
  • 返回值形式3 表示没有返回值,return不生效

    1
    2
    3
    def add2(a: Int, b: Int) {
    a + b;
    }
1
2
// 把一个函数赋给一个变量,但是并不执行函数
val f2 = add _

函数参数

  • scala函数如果不存在形参列表的话,调用时可以省略()

  • scala函数声明时参数可以设置默认值,在调用时如果没有指定实参,会使用默认值,如果指定了实参,则会覆盖默认值(默认从左到右覆盖),也可以指定带名参数指定覆盖某个默认值

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // 指定默认值
    def connect(host: String = "localhost", port: Int = 3306, user: String = "root", password: String = "root") = {
    println("host:" + host + ",port:" + port + ",user:" + user + ",password:" + password)
    }

    //host:localhost,port:3306,user:root,password:root
    connect()
    //从左到右赋值
    // host:127.0.0.1,port:12423,user:root,password:root
    connect("127.0.0.1",12423)
    // 带名参数指定覆盖
    // host:localhost,port:3306,user:root,password:123456
    connect(password = "123456")
  • scala函数中的形参默认是val的,不允许在函数中修改

  • scala中也有可变参数,java中使用的是…,而在scala中使用的是*,同样的,如果同时存在多个参数,可变参数要放在形参列表的最后

    1
    2
    3
    4
    5
    // 可变参数 *-parameter must come last
    // 0到n个参数
    def fun(args:Int*): Unit ={
    println(args)
    }