其实这里的函数 和 C里的函数 意思差不多 和java的方法也差不多
例如 我们写一个简单的函数
def fun(a:String,b:Int)={
println(a)
println(b)
}
fun("wy",33)
很简单 传入一个参数a 传入一个 参数 b 分别打印出来
这里说一下语法 def 代表函数的定义 fun代表 函数名 ()里是参数列表
java中 是 (String a,int b) 在scala中 顺序有变化 是先写 参数名 然后 冒号 参数类型 ={} 中写函数体
上面函数是很简单的 分别打印 a和b 在scala中 其实可以省略参数 也就是 如果不传 可以默认一个参数值
def fun(a:String,b:Int=33)={
println(a)
println(b)
}
fun("name")
也就是在 b参数上 默认=33 这样调用的时候 b参数 可以传也可以不传 如果不传 则b的值按33赋值
我们还可以改变 传参的顺序
def fun(a:String,b:Int=33)={
println(a)
println(b)
}
fun(b=20,a="name")
这样我们在调用的时候 不是按照 a,b这样的一个顺序传递参数的 而是先传 b 再传 a
在调用的时候 我们指定了 b的值=20 a的值=name 这样就可以了
上述是没有返回的参数 如果定义有返回值类型的 我们来看
def fun(a:String,b:Int=33):String={
println(a)
println(b)
"abcde"
}
println(fun(b=20,a="name"))
这样 定义 :String 代表 返回值类型是String 而函数体中 并没有声明return 在scala中 默认最后一条就是返回值 运行下来的结果是
name
20
abcde
在scala中 也是支持动态参数的
def fun(a:Int*):Int={
var sum=0
for(i <- a){
sum+=i
}
sum
}
println(fun(1,2,3,4,5,6,7,8,9,10))
在这里定义了一个累加函数 动态参数 在java中 是 类型后加上 ... 在scala中 类型后加 *
无论是java还是scala 动态参数 底层都是数组 集合 所以使用的时候还是要循环 调用方式一样 传多少个都行