前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Scala 函数

Scala 函数

作者头像
栗筝i
发布2022-12-01 21:00:03
1620
发布2022-12-01 21:00:03
举报
文章被收录于专栏:迁移内容迁移内容

scala定义函数的标准格式为: def 函数名(参数名1: 参数类型1, 参数名2: 参数类型2) : 返回类型 = {函数体}

函数示例1:返回Unit类型的函数
代码语言:javascript
复制
def shout1(content: String) : Unit = {
  println(content)
}
函数示例2:返回Unit类型的函数,但是没有显式指定返回类型。(当然也可以返回非Unit类型的值)
代码语言:javascript
复制
def shout2(content: String) = {
  println(content)
}
函数示例3:返回值类型有多种可能,此时也可以省略Unit
代码语言:javascript
复制
def shout3(content: String) = {
  if(content.length >= 3)
    content + "喵喵喵~"
  else
    3
}
函数示例4:带有默认值参数的函数,调用该函数时,可以只给无默认值的参数传递值,也可以都传递,新值会覆盖默认值;传递参数时如果不按照定义顺序,则可以通过参数名来指定。
代码语言:javascript
复制
def shout4(content: String, leg: Int = 4) = {
  println(content + "," + leg)
}
函数示例5:变长参数(不确定个数参数,类似Java的…)
代码语言:javascript
复制
def sum(args: Int*) = {
  var result = 0
  for(arg <- args)
    result += arg
  result
}
递归函数:递归函数在使用时必须有明确的返回值类型
代码语言:javascript
复制
def factorial(n: Int): Int = {
  if(n <= 0)
    1
  else
    n * factorial(n - 1)
}

注意 1、Scala可以通过=右边的表达式 推断出函数的返回类型。如果函数体需要多个表达式,可以用代码块{}。 2、可以把return 当做 函数版本的break语句。 3、递归函数一定要指定返回类型。 4、变长参数通过*来指定,所有参数会转化为一个seq序列。

过程

我们将函数的返回类型为Unit的函数称之为过程。

定义过程示例1:
代码语言:javascript
复制
def shout1(content: String) : Unit = {
  println(content)
}
定义过程示例2:
代码语言:javascript
复制
def shout1(content: String) = {
  println(content)
}

注意:这只是一个逻辑上的细分,如果因为该概念导致了理解上的混淆,可以暂时直接跳过过程这样的描述。毕竟过程,在某种意义上也是函数。

懒值

当val被声明为lazy时,他的初始化将被推迟,直到我们首次对此取值,适用于初始化开销较大的场景。

lazy示例:通过lazy关键字的使用与否,来观察执行过程
代码语言:javascript
复制
object Lazy {

  def init(): String = {
    println("init方法执行")
    "嘿嘿嘿,我来了~"
  }

  def main(args: Array[String]): Unit = {
    lazy val msg = init()
    println("lazy方法没有执行")
    println(msg)
  }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-09-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 函数示例1:返回Unit类型的函数
  • 函数示例2:返回Unit类型的函数,但是没有显式指定返回类型。(当然也可以返回非Unit类型的值)
  • 函数示例3:返回值类型有多种可能,此时也可以省略Unit
  • 函数示例4:带有默认值参数的函数,调用该函数时,可以只给无默认值的参数传递值,也可以都传递,新值会覆盖默认值;传递参数时如果不按照定义顺序,则可以通过参数名来指定。
  • 函数示例5:变长参数(不确定个数参数,类似Java的…)
  • 递归函数:递归函数在使用时必须有明确的返回值类型
  • 过程
  • 定义过程示例1:
  • 定义过程示例2:
  • 懒值
  • lazy示例:通过lazy关键字的使用与否,来观察执行过程
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档