码迷,mamicode.com
首页 > 其他好文 > 详细

scala学习笔记-函数入门(3)

时间:2017-04-14 01:08:43      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:scala   ring   string   推断   递归函数   多行   return   for   斐波那契数   

函数的定义与调用

在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)
}

 

scala学习笔记-函数入门(3)

标签:scala   ring   string   推断   递归函数   多行   return   for   斐波那契数   

原文地址:http://www.cnblogs.com/HeQiangJava/p/6706917.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!