Scala有方法与函数,方法是类的一部分,函数是一个对象可以复制给一个变量,即类中定义的方法就是函数
Scala中的方法跟Java的类似,方法是组成类的一部分
Scala中的函数是一个完整的对象,继承了Trait的类的对象
Scala中使用val语句可以定义函数,def语句定义方法
方法声明
Scala方法声明格式:
def functionName ([参数列表]) : [return type]
如果你不写等于号和方法主体,那么方法会被隐式声明为抽象(abstract),包含它的类型于是也是一个抽象类型。
方法定义
方法定义由一个 def 关键字开始,紧接着是可选的参数列表,一个冒号 : 和方法的返回类型,一个等于号 = ,最后是方法的主体。
代码中 return type 可以是任意合法的 Scala 数据类型。参数列表中的参数可以使用逗号分隔。
Scala 方法定义格式如下:
def functionName ([参数列表]) : [return type] = {
function body
return [expr]
}
以下方法的功能是将两个传入的参数相加并求和:(基本语句)
object Add {
def addInt(a: Int, b: Int): Int = {
var sum: Int = 0
sum = a + b
return sum
}
}
求和实例:
object Test1{
def main(args: Array[String]): Unit = {
println("Returned Value :" + addInt(5,7))
}
def addInt(a:Int,b:Int) :Int = {
var sum:Int = 0
sum = a + b
return sum
}
}
运行结果:
方法和函数的区别:
打开cmd,依次输入以下命令:
def m2(f:(Int,Int) => Int) = f(2,6)
val f2 = (x: Int,y:Int) => x-y
m2(f2)
结果:
object MethodAndFunctionDemo{
//定义一个方法m1
//方法m1 参数要求是一个函数,函数的参数必须是两个 int类型
//返回值类型也是Int类型
def m1(f:(Int,Int) =>Int) :Int = {
f(2,6)
}
//定义一个函数f1 参数是两个Int类型,返回值也是Int类型
val f1 = (x:Int,y:Int) => x+y
//定义一个函数f2
val f2 =(m:Int,n:Int) => m*n
def main(args: Array[String]): Unit = {
//调用m1方法,并传入f1函数
var r1 = m1(f1)
println(r1)
//调用m1方法,并传入f2函数
var r2 = m1(f2)
println(r2)
}
}
运行结果:
2、在Scala中无法直接操作方法,如果要操作方法,必须先将其转换成函数。有两种方法可以将方法转换成函数:
val f1 = m _
在方法名称m后面紧跟一个空格和下划线告诉编译器将方法m转换成函数,而不是要调用这个方法。 也可以显示地告诉编译器需要将方法转换成函数:
val f1: (Int) => Int = m
例如:
Idea:
object TestMap{
def haha(f:Int => Int):Unit = {
val r = f(10)
println(r)
}
val f0 = (x:Int) => x*x
//定义一个方法
def m0(x:Int) :Int = {
//传递进来的参数乘以10
x*10
}
//将方法转换成函数,利用了神奇的下滑线
var f1 = m0 _
def main(args: Array[String]): Unit = {
//通过m0 _将方法转化成函数
haha(m0 _);
//如果直接传递的是方法名称,scala相当于是把方法转成了函数
haha(m0)
//通过x => m0(x)的方式将方法转化成函数,这个函数是一个匿名函数,等价:(x:Int) => m0(x)
haha(x => m0(x))
}
}
运行结果: