Scala的函数参数

64 阅读2分钟

一、gender(参数的默认值)

1.格式:def 函数名(参数1:类型1=默认值1,参数2:类型2=默认值2)

例子:

// gender(参数的默认值)
  def greet(name:String="哈哈",age:Int=18,gender:String="女"):Unit = {
    println(s"我是${name},我今年${age},${gender}")
  }
def main(args: Array[String]): Unit = {
  greet("小花",18) // 默认值   提供两个参数
  greet("小明",20,"男")  使用所有参数
  greet()    使用的默认值
}

注意:传参数的时候,如果只传一个参数,其他只用默认值,则需要将该参数的参数类型(名字)添加在前面即可例如 :greet(age = 20)

例子:

def greet(name:String="哈哈",age:Int=18,gender:String="女"):Unit = {
    println(s"我是${name},我今年${age},${gender}")
  }
def main(args: Array[String]): Unit = {
  greet("小花",18) // 默认值
  greet("小明",20,"男")
  greet()

  // 设置age为20,其他采用默认值
  // 传参数的时候,指定参数的名字
  greet(age = 20)
  greet(gender = "男",age = 20)
}

二、 函数的调用

1.如果函数不需要参数,可以在定义函数的时候,省略()

2.如果定义函数的时候没有写(),那么在调用函数的时候,也不要写()

例子(图):

Snipaste_2025-10-14_09-34-26.png 例子(代码):

// 如果函数不需要参数,可以在定义函数的时候,省略()
  def greet:Unit = {
    println(s"hahahaha~~~")
  }
def main(args: Array[String]): Unit = {
// 如果在定义函数的时候没有写(),那么在调用函数的时候,也不要写()
  greet()   //此处写了 () 是错误的,改为正确的方法:直接将 () 给删除掉就OK
}

三、传入参数的数量

1.传入不同的数量的参数

2.变参:允许传入不同个数,但是类型相同

3.Int* : Int*:表示可变参数,用于声明一个方法或者函数可以直接接受 零个或多个Int类型的额参数

  • :(1)是Scala中用于标记可变参数的特殊符号,放在类型后面。例如:Int* String*

    (2)当方法参数声明为 Int* 时,调用该方法时可以传入任意数量的 Int 值(包括零个),这些值会被自动封装成一个 Seq[Int] 序列在方法内部使用。

4.array:数组

例子(代码):

def greet(name:String, score:Int*):Unit = {
  // score 是一个列表
  var total:Double = 0
  for(i <- score){
    total += 1
  }
  val avg = total / score.length
  println(s"${name},平均分:${avg}")
}

def main(args: Array[String]): Unit = {
  
  greet("泡芙",90,95,100)
  greet("芒果",85,90,95)
  greet("小花",90)
}

四、递归函数

1.定义:指在函数体内直接·或间接调用自身的函数,。

2.可能导致死循环

3.适合解决一类问题 (1)可以把大问题拆分成同类的小问题 (2)当问题足够小的时候,可以直接求和

4.起始条件:一个递归的终止条件,确保递归不会无限进行。它处理最简单的情况并返回结果。

递归规则:在这个部分,函数会调用自身,以解决一个更小的子问题。

基本结构 例子(图):

Snipaste_2025-10-14_10-59-38.png

例子(代码):

def sum(n:Int):Int = {
  if(n == 1){
    1
  }else{
    sum(n-1) + n
  }
}
def main(args: Array[String]): Unit = {
  val s = sum(100)
  println(s)
}