注意如下方法中参数nums声明类型Int后标注了*,代表nums是不定长的Int型参数:
scala> def fun1(nums:Int*):Int= nums.sum def fun1(nums: Int*): Int scala> fun1(1, 2) val res7: Int = 32)方法调用时可以省略传参小括号
特殊情况下,当方法无需接收任何参数时,即参数为空,那么在调用该方法时则可省略小括号,直接写出方法名即可;更特殊地,如果一个方法无需接收任何参数,那么在定义方法时则可省略小括号的书写,此时在调用方法时则必须省略小括号:
scala> def sayHelloWorld : Unit = println("hello, world")
def sayHelloWorld: Unit
scala> sayHelloWorld
hello, world
scala> sayHelloWorld() ^
error: Unit does not take parameters
3) return缺省。
绝大多数情况下可以省略return,此时方法体中的最后一句代码执行结果即为该方法的返回值,一般仅需在提前终止代码块执行并返回结果时才需使用,例如如下方法首先判断除数是否为0,若为0则提前返回:
scala> def fun2(a:Int, b:Int):Int={
| if(b==0) return -1
| a / b
| }
def fun2(a: Int, b: Int): Int
4)返回值类型缺省
Scala中的一个典型特性就是支持类型推断,包括方法的返回值类型推断。既然可以自动推断,所以一般可以省略,但当方法具有递归调用时必须显示声明返回值类型:
scala> def fun3(num:Int):Int = if(num==1) 1 else fun3(num-1)*num
def fun3(num: Int): Int
scala> def fun4(num:Int) = if(num==1) 1 else fun4(num-1)*num
^error: recursive method fun4 needs result type
5)等号缺省
方法声明中的等号用于连接方法签名(即方法名和参数部分)和方法体(即大括号中的代码块),用以表示赋值。所以,当无需返回任何结果或者说返回值类型为空时(返回值类型为空用Unit表示),此时即可省略等号。省略等号意味着返回值类型一定为空,即使方法体中的代码块实际会产生非空的返回值。例如以下方法的返回结果与预期不一致:
scala> def fun4(a:Int, b:Int) {a+b}
^ warning: procedure syntax is deprecated: instead, add `: Unit =` to explicitly declare `fun4`'s return type
def fun4(a: Int, b: Int): Unit
scala> fun4(1, 2) // 返回结果为空
6) 大括号缺省
即当方法体仅有单行代码时,无需显示写出大括号。这很容易理解:大括号的作用是将一组代码囊括为一个整体,而当代码块仅有单行代码时自然可以缺省。
注:等号和大括号不可同时缺省。
比如如下代码等价:
def f1(x:Int):(Int) => Int = {
(i:Int) => x + i
}
def f2(x:Int):(Int)=>Int = (i:Int) => x + i
def f3(x:Int) = (i:Int) => x + i



