10同样也

48 阅读2分钟
  1. 动态拼接字符串:通过 $ 符号引用变量(nameagegender),将变量的值嵌入到字符串中,避免了传统的字符串拼接(如 + 操作符)的繁琐。

  2. 语法解析

    • 前缀 s 表示这是一个字符串插值表达式(String Interpolation),告诉 Scala 编译器需要解析字符串中的变量。
    • ${变量名} 是插值语法,用于将变量的值替换到字符串对应位置。对于简单变量,也可以简写为 $变量名(如 $name),但使用 ${} 更通用,尤其适合复杂表达式。
  3. 实际效果

    • 当调用 greet("小花", 18) 时,会解析为字符串 我是小花,我今年18,女gender 使用默认值)。
    • 当调用 greet("小明", 20, "男") 时,会解析为 我是小明,我今年20,男
  • 功能说明:通过不同的函数调用方式,展示了 Scala 中函数默认参数的使用方法,即调用函数时可以选择性地省略带有默认值的参数,此时将使用参数的默认值。
object base36 {
  // 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()
  }
}

image.png

在这段代码中,score 被定义为 变长参数(变参) ,类型为 Int*,其定义和作用如下:

1. 定义

score: Int* 表示 score 是一个接受多个 Int 类型参数的变长参数。它本质上是一个 Array[Int](整数数组),允许调用函数时传入任意数量的 Int 类型参数(包括 0 个)。

2. 作用

  • 接收多个成绩参数:用于收集学生的多门学科成绩。例如调用 greet("小明", 90, 100, 98) 时,score 会收集 9010098 这三个成绩。
  • 支持灵活的参数数量:调用函数时可以传入 1 个、多个甚至 0 个成绩(如 greet("小明") 也是合法的,此时 score 为空数组)。
  • 用于计算平均分:在函数内部,通过遍历 scorefor(i <- score))累加所有成绩,再结合 score.length(成绩数量)计算出平均分 avg,最终输出学生的平均分信息。
object base38 {
  // 传入不同的数量的参数
  // 第一个参数是学生的名字,从第二个参数开始,是这个学生的某个学科的
  // 变参:允许传入不同个数,但是类型相同的参数
  // Int
  // array 数组

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

  def main(args: Array[String]): Unit = {
    //
    greet("小明", 90, 100,98,100,60)
    greet("小明", 80, 80)
    greet("小明", 90)
  }
}

image.png

object base40 {
  // 求阶乘
  // f(n) = 1 * 2 * 3 * 4 * 5 .... * n
  def f(n:Int): Int = {
  // 完成你的代码
  //   if(n == 1)
  //     1
  //   f(n-1)*n
  
  }

  def main(args: Array[String]): Unit = {
    val s = f(4)
    println(s)// 4*3*2*1 = 24
  }
}

image.png

image.png