- Scala 方法的定义
//定义有参数函数
def max(x:Int,y:Int):Int={
if(x>y)
x
else
y
}
//没有参数的函数定义
def test():Unit={
}
注意点:
- 方法定义语法 用 def 来定义
- 可以定义传入的参数,要指定传入参数的类型
- 方法可以写返回值的类型也可以不写,会自动推断,有时候不能省略,必须 写,比如在递归方法中或者方法的返回值是函数类型的时候。
- scala 中方法有返回值时,可以写 return,也可以不写 return,会把方法中最后 一行当做结果返回。当写 return 时,必须要写方法的返回值。
- 如果返回值可以一行搞定,可以将{}省略不写
- 传递给方法的参数可以在方法中使用,并且 scala 规定方法的传过来的参数为 val 的,不是 var 的。
- 如果去掉方法体前面的等号,那么这个方法返回类型必定是 Unit 的。这种说法 无论方法体里面什么逻辑都成立,scala 可以把任意类型转换为 Unit.假设,里 面的逻辑最后返回了一个 string,那么这个返回值会被转换成 Unit,并且值会 被丢弃。
- 递归方法
//递归函数
def test(n:Int):Int={
//定义递归的边界
if(n==1)
1
else
n*test(n-1)
}
- 参数有默认值的方法
默认值的函数中,如果传入的参数个数与函数定义相同,则传入的数值会覆盖 默认值。
如果不想覆盖默认值,传入的参数个数小于定义的函数的参数,则需要指定参数名称。
//默认值参数的函数
def test1(x:Int,y:Int=100):Int={
x+y
}
println(test1(200))
- 可变参数的方法
//不定长的参数函数
//注意:多个参数逗号分开
def test2(x:Int*):Unit={
println(x)
}
- 匿名函数
1 . 有参匿名函数
2 . 无参匿名函数
3 .有返回值的匿名函数
可以将匿名函数返回给 val 定义的值
//匿名函数
//匿名函数不能定义返回值类型,由其自动推断
var value=(x:Int,y:Int) => {
x+y
}
- 偏应用函数
偏应用函数是一种表达式,不需要提供函数需要的所有参数,只需要提供部分,或 不提供所需参数。
//偏应用函数
def printLog(date:Date,log:String):Unit={
println("时间:"+date+"日志:"+log)
}
private val fun: String => Unit = printLog(d, _: String)
fun("abc")
fun("efg")
//时间:Sun Dec 05 18:47:13 CST 2021日志:abc
//时间:Sun Dec 05 18:47:13 CST 2021日志:efg