一、测试环境
名称 | 版本 |
---|---|
操作系统 | win10 |
CPU | 12th Gen Intel® Core™ i7-12700H |
内存 | 16G |
JDK | 1.8.0_171 |
Scala | 3.1.2 |
二、代码
object TestParameterPassing {
def main(args: Array[String]): Unit = {
ValPmtPassing(ExampleFuc(100))
NamePmtPassing(ExampleFuc(100))
FuncPmtPassing(ExampleFuc,100)
}
def ExampleFuc(Num: Int): Int = {
println("调用一次例子函数")
Num
}
//传值参数测试函数
def ValPmtPassing(Num: Int): Unit = {
printf("传值参数函数测试:%d\n",Num)
printf("传值参数函数测试:%d\n",Num)
println("+++++++++++++++++++++")
}
//传名参数测试函数
def NamePmtPassing(Func: => Int): Unit = {
printf("传名参数函数测试:%d\n",Func)
printf("传名参数函数测试:%d\n",Func)
println("+++++++++++++++++++++")
}
//传函数参数测试函数
def FuncPmtPassing(Func: Int => Int, Num: Int): Unit = {
printf("传函数参数函数测试:%d\n",Func(Num))
printf("传函数参数函数测试:%d\n",Func(Num))
println("+++++++++++++++++++++")
}
}
三、运行结果
调用一次例子函数
传值参数函数测试:100
传值参数函数测试:100
+++++++++++++++++++++
调用一次例子函数
传名参数函数测试:100
调用一次例子函数
传名参数函数测试:100
+++++++++++++++++++++
调用一次例子函数
传函数参数函数测试:100
调用一次例子函数
传函数参数函数测试:100
+++++++++++++++++++++
四、个人理解
1、传名参数:
传名参数会把传入函数的函数体整个带入,我们在函数ValPmtPassing中调用两次,所以他也会完整调用两次ExampleFuc,输出两次:调用一次例子函数。
2、传值参数:
传值参数只会在开始时调用一次ExampleFuc,再把传入函数的返回值带入,所以只输出一次:调用一次例子函数。
3、传函数参数:
实现的效果上和传名参数一样,但使用上稍有区别,传名参数只需要一个传入参数,就把方法名和方法需要的参数一并传入,而传函数参数需要传多个,除了函数名还有参数,便捷性上传名参数好很多。