Scala函数的参数类型

方法的参数的调用有两种格式:按值(by-name)传递按名(by-name)传递。值参数是函数默认的参数格式,函数调用的时候所有值参数会立刻执行,而名参数在函数定义中需要用=>指定,它在函数调用的时候不会被立刻执行,只有在函数体内应用的时候才会执行。可以将按值传递参数想象成val,按名传递参数想想为def。

下面通过一个例子对比看两种参数传递方式。对于两种参数传递方式,如果参数是普通的数据类型(例如这里的字符串)返回结果是一样的,但如果参数是方法或者对象就会不一样了。对使用按值传递参数的函数mood,注意红框区域,两个println会在调用mood的时候执行,产生两个输出,而类似地将mood改为按名传递参数的函数,println不会在函数调用的时候立刻执行,会在函数体内需要的地方执行(例如,现在是2018-01-16,周二,那么只有println(“sad”)执行)。

正确使用两种参数类型不仅能解决函数调用中按需执行的问题,也能提高程序性能,减少内存消耗。

Scala函数的参数类型