-
动态拼接字符串:通过
$符号引用变量(name、age、gender),将变量的值嵌入到字符串中,避免了传统的字符串拼接(如+操作符)的繁琐。 -
语法解析:
- 前缀
s表示这是一个字符串插值表达式(String Interpolation),告诉 Scala 编译器需要解析字符串中的变量。 ${变量名}是插值语法,用于将变量的值替换到字符串对应位置。对于简单变量,也可以简写为$变量名(如$name),但使用${}更通用,尤其适合复杂表达式。
- 前缀
-
实际效果:
- 当调用
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()
}
}
在这段代码中,score 被定义为 变长参数(变参) ,类型为 Int*,其定义和作用如下:
1. 定义
score: Int* 表示 score 是一个接受多个 Int 类型参数的变长参数。它本质上是一个 Array[Int](整数数组),允许调用函数时传入任意数量的 Int 类型参数(包括 0 个)。
2. 作用
- 接收多个成绩参数:用于收集学生的多门学科成绩。例如调用
greet("小明", 90, 100, 98)时,score会收集90、100、98这三个成绩。 - 支持灵活的参数数量:调用函数时可以传入 1 个、多个甚至 0 个成绩(如
greet("小明")也是合法的,此时score为空数组)。 - 用于计算平均分:在函数内部,通过遍历
score(for(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)
}
}
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
}
}