scala函数
在scala中,方法和函数几乎可以等同(定义、使用、运行机制都一样的),只是函数的使用方式更加的灵活多样,函数像变量一样,既可以作为函数的参数使用,也可以将函数赋值给一个变量,函数的创建不用依赖于类或者对象,而在Java当中,函数的创建则要依赖于类、抽象类或者接口
基本语法
1 | // 函数声明的关键字是def |
函数可以有返回值,也可以没有
返回值形式1 指明返回值类型,使用:返回值类型=
1
2
3def add(a: Int, b: Int): Int = {
return a + b;
}返回值形式2 =表示返回值类型不确定,使用类型推导完成 (在这里注意返回值不能明确使用return,否则无法进行自动推断,必须使用:返回值类型= 来明确指出返回值类型)
1
2
3def add1(a: Int, b: Int) = {
a + b;
}返回值形式3 表示没有返回值,return不生效
1
2
3
4
5
6
7
8def add2(a: Int, b: Int) {
a + b;
}
// 也可以设置返回值为Unit
def add2(a: Int, b: Int): Unit = {
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)
}