六、Scala 函数的定义
一、定义
方法:Scala
中的方法跟 Java
的类似,方法是组成类的一部分。
函数:Scala
中的函数则是一个完整的对象,Scala
中的函数其实就是继承了 Trait
的类的对象。
函数可作为一个参数传入到方法中,而方法不行。
注意:函数体的最后一行为返回值,不需要使用 return
如图,要么返回 x
,要么返回 y
object HelloWorld {
def main(args: Array[String]): Unit = {
println(add(2, 3))
println(three) // 不需要参数的时候,可以省略括号
sayHello
}
def add(x: Int, y: Int):Int = {
x + y // 最后一行就是 返回值,不需要return
}
// 只有一行代码,省略了大括号;这里也可以判断出返回类型是int,所以返回类型也可以省略
def three() = 1 + 2
// Unit,表示没有返回值
def sayHello(): Unit ={
println("Say Hello ...")
}
}
二、默认参数
默认参数的情况,调用函数,括号不能省略
def sayName(name:String = "周杰伦"): Unit ={
println(name)
}
三、命名参数
def speed(distance: Float, time: Float):Float = {
distance / time
}
println(speed(100, 10)) // 直接按顺序传入参数
println(speed(distance = 100, time = 10)) // 按顺序命名传入参数
println(speed(time = 10, distance = 100)) // 随意顺序,命名传入参数
命名参数,参数名字相同即可
四、可变参数
可变参数必须在最后一个参数定义,最后定义的参数后面加 *
号即可
object ArrayApp extends App {
def echo(args: String*): Unit = {
for (arg <- args){
println(arg)
}
}
echo("php", "java", "scala")
}
输出
php
java
scala
:_*
转换参数序列
object ArrayApp extends App {
def echo(args: String*): Unit = {
for (arg <- args){
println(arg)
}
}
val arr = Array("php", "java", "scala")
echo(arr :_*) // 这里需要把 arr 数组转化为参数序列,相当于把数组里面每个元素当作多个参数传进去
}
传入数组参数序列
object ArrayApp extends App {
def echo(args:Array[String]*): Unit = {
for (arg <- args){
println(arg)
}
}
val arr1 = Array("php", "java", "scala")
val arr2 = Array("c", "c++", "go")
echo(arr1, arr2) // 传入数组参数序列
}