函数&&方法的声明
object Test1 extends App {
// 定义一个函数
def square(x:Int) = {
println("传入的值是:"+x)
val res= x*x
println(res)
}
square(5) // 函数已经被调用,但是函数值没有被打印出来
// 变形
// 返回值类型为Unit的时候 = 可以不写
def printName(x:String) = {
println(x)
}
printName("陈俊")
// 匿名函数
val func1 = (x:Int) => {
x * x
}
// 定义一个函数2
val func2:Int=>Int = (x:Int) =>{
x * x
}
// 定义两个参数的函数
val func3 = (x:Int,y:Int) => {
x + y
}
val func4:((Int,Int)=>Int) = (x:Int,y:Int) =>{
x+y
}
// 不写参数列表
// 参数不写,但是参数类型从什么变成了什么需要写,不然报错
val func5:((Int,Int)=>Int) = (_+_)
println(func1(1))
println(func2(2))
println(func3(3, 4))
println(func4(5, 6))
println(func5(7, 8))
}
函数的调用
1、传值调用
// 默认就是传值,传入一个形参
def square2(x:Int) ={
println(x)
x* x
}
square2(1+2)
// 传值调用就是把1+2先计算出来,然后放到形参的位置,后续都使用这个计算结果
2、传名调用
// 传名调用:用到的时候才会计算值,之前都是个函数
// 注意: x:后面有个空格
def square3(x: => Int):Int ={
println(x)
x*x
}
square3(1+2)
命名参数&&缺省值
println("--------------命名参数------------------")
def printName2(first:String,last:String) = {
println(first+ "" + last)
}
printName2("chen","jun")
printName2(last = "jun",first = "chen") // 顺序可以打乱
println("------参数的缺省值-----------")
// 直接给参数列表赋值,调用函数的时候,这两个参数都有缺省值,可以不传参就可以调用
def printName3(first:String="James",last:String="Smith") = {
println(first+ "" + last)
}
printName3()
// 如果没有缺省值,不传参会报错
// 想改变缺省值,就直接传参
printName3(last = "chen")
printName3("chenjun","jun")
匿名函数
//匿名函数:就是定义一个函数不起名字
// => 左边是参数列表,右边是函数体
// (参数列表) => {函数体]
val res = () => { // 空参
System.getProperty("user.dir") //
}
println(res)
=> <function0>