1:方法
-
语法:
def 方法名(参数名:参数类型, 参数名:参数类型) : [return 返回值类型] = { // 方法体:一系列的代码 }
-
说明
- 参数列表的参数类型不能省略
- 返回值类型可以省略,由scala编译器自动推断
- 返回值可以不写return,默认就是{}块表达式的值
-
示例
scala> def add(a:Int,b:Int) = a+b add: (a: Int, b: Int)Int scala> add(1,2) res8: Int = 3
-
注意事项
- 如果定义递归方法,不能省略返回值类型
-
方法参数
- 默认参数:在定义方法时可以给参数定义一个默认值
//1. 定义一个计算两个值相加的方法,这两个值默认为0 //2. 调用该方法 scala> def add(x:Int = 0, y:Int = 0) = x + y add: (x: Int, y: Int)Int scala> add(1) res14: Int = 1 scala> add(1,2) res15: Int = 3
- 带名参数:在调用方法时,可以指定参数的名称来进行调用
scala> def add(x:Int = 0, y:Int = 0) = x + y add: (x: Int, y: Int)Int scala> add(x=1) res16: Int = 1
- 变长参数:如果方法的参数是不固定的,可以定义一个方法的参数是变长参数
- 语法:
def 方法名(参数名:参数类型*):返回值类型 = { 方法体 } //在参数类型后面加一个*号,表示参数可以是0个或者多个
- 示例:
scala> def add(num:Int*) = num.sum add: (num: Int*)Int scala> add(1,2,3) res17: Int = 6
- 语法:
- 默认参数:在定义方法时可以给参数定义一个默认值
2:函数
-
语法
val 函数变量名 = (参数名:参数类型, 参数名:参数类型....) => 函数体
-
注意
- 函数是一个对象(变量)
- 类似于方法,函数也有输入参数和返回值
- 函数定义不需要使用def定义
- 无需指定返回值类型
-
示例
scala> val add = (x:Int, y:Int) => x + y add: (Int, Int) => Int = <function2> scala> add(1,2) res3: Int = 3 //一个函数没有赋予一个变量,则称为匿名函数, //后期再实际开发代码的时候,基本上都是使用匿名函数 (x:Int,y:Int)=>x+y
3:方法和函数的区别
- 方法是隶属于类或者对象的,在运行时,它是加载到JVM的方法区中
- 可以将函数对象赋值给一个变量,在运行时,它是加载到JVM的堆内存中
- 函数是一个对象,继承自Function,函数对象有apply,curried,toString,tupled这些方法,而方法则没有
4:方法转换成函数
- 有时候需要将方法转换为函数,作为变量传递,就需要将方法转换为函数
- 使用
_
即可将方法转换为函数 - 示例
scala> def add(x:Int,y:Int)=x+y add: (x: Int, y: Int)Int scala> val a = add _ a: (Int, Int) => Int = <function2>