函数的定义与调用

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

}

最新文章

  1. 基于东北F4的设计模式情景剧——第一幕 装饰模式(Decorator Pattern)
  2. ViewPager的缓存机制
  3. sublime 3
  4. html、css、js注释
  5. framework 安装出错 1603
  6. 项目视频讲解_[HeyJava][尚学堂][CMS文章内容管理系统]
  7. Spring面试题汇总
  8. [UOJ 74] 【UR #6】破解密码
  9. 我的django之旅(一)
  10. RESTful架构详解(转)
  11. Struts(二十三):使用声名式验证
  12. Redis做分布式锁
  13. 【Python3练习题 009】 打印出所有的“水仙花数”
  14. 使用sort函数进行排序
  15. NOIP2016提高组Day1T2 天天爱跑步 树链剖分 LCA 倍增 差分
  16. MySql/Oracle和SQL Server的分页查
  17. 打开MSSQL 2008 R2的时候,展开数据库都显示以下的错误提示: 值不能为空。参数名viewinfo(microsoft.sqlserver.management.sqlstudio.explorer)
  18. C#批量更新mongodb符合条件的数据
  19. web程序打包详解
  20. ElasticStack系列之十二 &amp; 搜索结果研究

热门文章

  1. Generate a document using docxtemplater
  2. ORACLE隐藏参数查看及修改
  3. mysql 连接数用完,root也无法登陆的处理方法
  4. Kotlin开发springboot项目(二)
  5. PHP技术栈
  6. CSS实现常用组件特效(不依赖JS)
  7. c#引用c++dll和c++导出类出现的各种问题
  8. 微信小程序,相关代码
  9. Kibana 学习资料
  10. 【redis】设置密码