方法
语法
scala> def m1(a:Int,b:Int):Int = {
| a + b
| }
m1: (a: Int, b: Int)Int
规则:
- 方法定义的关键字为def
- 如果方法体只有一行,{}可以省略
- 没有return关键字,使用方法体的最后一行【值或者表达式】作为返回值
- 大多数情况下返回值类型也可以自动推断,可以不写,递归方法除外
举例
定义一个方法,实现传递两个Int参数,返回两个数值之和
scala> def m2(a:Int,b:Int):Int = a + b
m2: (a: Int, b: Int)Int
scala> m2(2,3)
res9: Int = 5
scala> def m3(a:Int,b:Int) = a + b
m3: (a: Int, b: Int)Int
scala> m3(3,3)
res10: Int = 6
方法参数的使用
默认参数的方法调用
scala> def m5(a:Int = 0,b:Int = 2) = a + b
m5: (a: Int, b: Int)Int
scala> m5(1,1)
res15: Int = 2
scala> m5(1,6) --指定所有参数
res16: Int = 7
scala> m5() --使用两个参数的默认值
res17: Int = 2
scala> m5(1) --给第一个参数赋值,第二个参数使用默认值
res18: Int = 3
scala> m5(a=1)
res19: Int = 3
scala> m5(b=1)
res20: Int = 1
scala> m5(b=4,a=3) --指定参数赋值
res21: Int = 7
变长参数的方法定义
scala> def m6(x:Int *) = x.sum
m6: (x: Int*)Int
scala> m6(1)
res22: Int = 1
scala> m6(1,2)
res23: Int = 3
scala> m6(1,2,4)
res24: Int = 7
函数
语法
规则:(参数) => {
//函数体
}
- 函数通过=>进行标记:用于区分方法【def】和函数
- 如果函数体只有一行,可以省略{}
- 没有return关键字,使用函数体的最后一行作为返回值
函数的本质
- Scala中函数的本质就是对象,每个函数就是一个FunctionN类的实例,N表示参数个数
- 调用函数的本质是调用了这个对象的方法实现的
- 所以要定义、调用函数,必须指定参数列表,不然只是定义或者调用了这个对象,而不是这个对象的方法
举例
scala> (x:Int,y:Int) => { x + y }
res32: (Int, Int) => Int = <function2>
scala> val str1 = "itcast"
str1: String = itcast
方法转换成函数
语法
val 函数名 = 方法名 _
举例
scala> def m2(a:Int,b:Int) = a + b
m2: (a: Int, b: Int)Int
scala> val f1 = m2 _
f1: (Int, Int) => Int = <function2>
方法与函数的区别
-
方法:由方法名、参数、方法体构成,一般指的是类中定义的函数即为方法
-
函数:由函数名、参数、函数体构成,一般指的是可以独立构建的称为函数