文章目录
- 1.函数的定义
- 2.匿名函数
- 3.递归函数
- 4.无参函数
- 5.方法和函数的区别联系
1.函数的定义
package MethodDemo
object FunctionDefinition {
// 实现加法的功能,省略写法,把函数体写在返回值的位置
val f1 = ((a: Int, b: Int) => { a + b })
val f2 = (a: Int, b: Int) => { a + b }
val f3 = (_: Int) + (_: Int)
val f4: (Int, Int) => Int = (_ + _)
//按照这去写
val f5: ((Int, Int) => Int) = ((x, y) => x + y)
val f6 = new Function2[Int, Int, Int] {
override def apply(v1: Int, v2: Int): Int = v1 + v2
}
def main(args: Array[String]): Unit = {
// 函数调用
val res = f1(10, 20)
println(res)
val res2 = f6(100, 100)
println(res2)
}
}
2.匿名函数
package MethodDemo
object AnonymousFunction {
// 定义一个匿名函数
(x: Int) => x + 10
val f1 = (x: Int) => x + 10
val f2 = (x: Int, y: Int) => x * y
def main(args: Array[String]): Unit = {
// 调用匿名函数
println(f1(30))
println(f2(10, 10))
}
}
3.递归函数
package MethodDemo
object RecursiveFunction {
// 定义一个递归函数
// 实现一个数学上阶乘的功能:3!=1*2*2 4!=4*3!
// 递归函数的返回值类型要指定
val factorial: (Int => Int) = (
(n) => {
if (n < 1)
1
else
n * factorial(n - 1)
}
)
def main(args: Array[String]): Unit = {
println(factorial(10))
}
}
4.无参函数
package expr.MethodDemo
object NoParaMeters {
// 定义一个无参函数,参数括号不能省略
val getAnswer = () => "success"
def main(args: Array[String]): Unit = {
// 无参函数的调用
println(getAnswer())
println(getAnswer)
}
}
5.方法和函数的区别联系
(1)方法和函数的定义语法不同
def 方法名(参数列表):返回类型=方法体
val 变量 = (函数参数列表=> 函数体)=函数体,简写:变量 = (函数参数列表)=> 函数体方法一般定义在某个类,特质,或者object中
方法可以共享使用所在类的属性
(2)将方法转换为函数
将方法作为参数传给另一个方法或者函数的时候,方法被转化为函数
使用神奇的下划线_
package expr.MethodDemo
object TestLambdaFunction {
def method1(x: Int, y: Int) = x + y
def main(args: Array[String]): Unit = {
val res1 = method1(10, 10)
// 方法转化为函数 _
val res2 = method1 _
println(res2)
println(res2(20, 10))
// 方法作为参数传给另一个方法或者函数,系统会自动把方法转化为函数
}
}
- ref:Scala深入学习之函数学习,深入浅出Scala编程语言入门到精通