方法
- 语法
def methodName (参数名:参数类型, 参数名:参数类型) : [return type] = {
// 方法体:一系列的代码
}
- 说明
参数列表的参数类型不能省略
返回值类型可以省略,由scala编译器自动推断
返回值可以不写return,默认就是{}块表达式的值 - 示例
scala> def add(a:Int,b:Int) = a+b
add: (a: Int, b: Int)Int
scala> add(1,2)
res8: Int = 3
scala>
- 注意
如果定义递归方法,不能省略返回值类型
示例:定义递归方法求阶乘 10 * 9 * 8 * 7 * 6 * … * 1
scala> def m1(x:Int)={
| if(x==1) 1
| else x * m1(x-1)
| }
<console>:14: error: recursive method m1 needs result type
else x * m1(x-1)
^
scala> def m1(x:Int):Int={
| if(x==1) 1
| else x * m1(x-1)
| }
m1: (x: Int)Int
scala> m1(10)
res9: Int = 3628800
- 方法的参数
1、默认参数
在定义方法时可以给参数定义一个默认值。示例:
//1. 定义一个计算两个值相加的方法,这两个值默认为0
//2. 调用该方法
scala> def add(x:Int = 0, y:Int = 0) = x + y
add: (x: Int, y: Int)Int
scala> add(10)
res14: Int = 10
scala> add(10,20)
res15: Int = 30
2、带名参数
在调用方法时,可以指定参数的名称来进行调用。示例
scala> def add(x:Int = 0, y:Int = 0) = x + y
add: (x: Int, y: Int)Int
scala> add(x=1)
res16: Int = 1
3、变长参数
如果方法的参数是不固定的,可以定义一个方法的参数是变长参数。
语法格式:
def 方法名(参数名:参数类型*):返回值类型 = {
方法体
}
//在参数类型后面加一个*号,表示参数可以是0个或者多个
示例:
scala> def add(num:Int*) = num.sum
add: (num: Int*)Int
scala> add(1,2,3,4,5)
res17: Int = 15
函数
scala支持函数式编程,将来编写Spark/Flink程序中,会大量使用到函数
- 语法
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
方法和函数的区别
- 方法是隶属于类或者对象的,在运行时,它是加载到JVM的方法区中
- 可以将函数对象赋值给一个变量,在运行时,它是加载到JVM的堆内存中
- 函数是一个对象,继承自FunctionN,函数对象有apply,curried,toString,tupled这些方法,而方法则没有
1212

被折叠的 条评论
为什么被折叠?



