Scala中有方法和函数两种,两者区别很小。Scala方法是类的一部分,而函数是一个对象可以赋值给一个变量。Scala中的函数则是一个完整的对象,Scala中的函数其实就是继承了Trait的类的对象。在Scala中使用val 语句可以定义一个函数,def语句定义方法。
class FunctionMethodDemo {
// 方法
def method(x: Int, y: Int) = x + y
// 函数
val func = (x: Int, y: Int) => x + y
}
方法的定义
Scala的方法定义格式如下:
def 函数名字(参数名称:参数类型):返回值类型={
方法体
}
需要注意的是:
① 方法体最后一行就是返回值,不需要使用Return
② 无返回参数时,返回值类型为Unit,等价于Java中的void关键字。
③ 如果方法体只有一行时,可以用类似 def method(x: Int, y: Int) = x + y 的方式实现。
方法中的参数
Scala中参数可以分为默认参数、可变参数以及命名参数。
- 默认参数
在方法声明时,会给参数赋值一个默认值。例如下图Spark源码所示
对于textFile方法的minPartitions参数,如果在调用的时候不进行赋值,则会默认是使用defaultMinPartitions对应值。
- 可变参数
传递的参数是不固定的,可多可少。
常见的小场景就是写一个求和的方法,随意传递几个参数,即可实现求和的逻辑:
def getSum(numbers:Integer*):Int={
var sum=0
for(number<-numbers){
sum+=number
}
sum
}
- 命名参数
命名参数即根据方法中的字段名称在调用时,可不按照声明顺序调用,只是指定参数值即可。
方法的调用
方法调用形式:functionName(参数列表)
如果方法中不含参数,可以不需要(),直接使用functionName就可以实现调用。
Scala中的to、util、range
to:左闭右闭,调用方式有两种: 1 to 10 《=======》1.to(10)
util: 左闭右开,1.until(10)
range:左闭右开, range(from,to,step)