函數的定義與調用 在Scala中定義函數時,需要定義函數的函數名、參數、函數體。 我們的第一個函數如下所示: def sayHello(name: String, age: Int) = { if (age > 18) { printf("hi %s, you are a big boy\n", n ...
函數的定義與調用
在Scala中定義函數時,需要定義函數的函數名、參數、函數體。
我們的第一個函數如下所示:
def sayHello(name: String, age: Int) = {
if (age > 18) { printf("hi %s, you are a big boy\n", name); age }
else { printf("hi %s, you are a little boy\n", name); age
}
sayHello("leo", 30)
Scala要求必須給出所有參數的類型,但是不一定給出函數返回值的類型,只要右側的 函數體中不包含遞歸的語句,Scala就可以自己根據右側的表達式推斷出返回類型。
在代碼塊中定義包含多行語句的函數體
單行的函數:def sayHello(name: String) = print("Hello, " + name)
如果函數體中有多行代碼,則可以使用代碼塊的方式包裹多行代碼,代碼塊中最後一行的返回值就是整個函數的返回值。與Java中不同,不是使用return返回值的。
比如如下的函數,實現累加的功能:
def sum(n: Int) = {
var sum = 0;
for(i <- 1 to n) sum += i
sum
}
遞歸函數與返回類型
如果在函數體內遞歸調用函數自身,則必須手動給出函數的返回類型。
例如,實現經典的斐波那契數列:
9 + 8; 8 + 7 + 7 + 6; 7 + 6 + 6 + 5 + 6 + 5 + 5 + 4; ....
def fab(n: Int): Int = {
if(n <= 1) 1
else fab(n - 1) + fab(n - 2)
}