1. 函数参数的默认值
Scala 允许为函数参数指定默认值,调用时可省略带默认值的参数。
1. 定义有默认值的函数
格式:
def 函数名(参数1:类型1=默认值1,参数2:类型2=默认值2)
定义一个函数,并使用不同的参数来测试使用
def greet(name: String = "Guest", age: Int = 18): Unit = {
println(s"Hello, $name! You are $age years old.")
}
// 使用默认值
greet() // 输出: Hello, Guest! You are 18 years old.
greet("小花")
greet(19)
greet(age=19)
// 只提供一个参数
greet(name = "Alice") // 输出: Hello, Alice! You are 18 years old.
// 提供所有参数
greet(name = "Bob", age = 25) // 输出: Hello, Bob! You are 25 years old.
实例:
// 定义带默认参数的函数
def greet(name: String, message: String = "Hello"): Unit = {
println(s"$message, $name!")
}
// 调用函数
greet("Alice") // 输出: Hello, Alice!
greet("Bob", "Good morning") // 输出: Good morning, Bob!
// 也可以通过参数名指定传递哪个参数
greet(message = "Hi", name = "Charlie") // 输出: Hi, Charlie!
注意:带有默认值的参数必须放在无默认值参数的后面。
2. 函数的变参
Scala 中使用*来定义可变参数,允许函数接受任意数量的同类型参数。
2.创建不带()的方法
如果函数没有参数,可以省略定义函数时的( )
格式:def 方法名:[返回类型]={}。
def sayHello: Unit = {
println("hello")
}
sayHello // 不用加()
示例:
// 定义可变参数函数
def sum(numbers: Int*): Int = {
var total = 0
for (num <- numbers) total += num
total
}
// 调用函数
println(sum(1, 2, 3)) // 输出: 6
println(sum(10, 20, 30, 40)) // 输出: 100
// 传递序列给变参函数时需要使用:_*转换
val nums = List(1, 2, 3, 4)
println(sum(nums: _*)) // 输出: 10
3. 无参函数
Scala 中的无参函数可以省略参数列表的括号,调用时也可以不带括号。 示例:
// 定义无参函数(两种方式)
def getGreeting(): String = "Hello, World!" // 带空括号
def getCurrentTime: Long = System.currentTimeMillis() // 不带括号
// 调用无参函数
println(getGreeting()) // 输出: Hello, World!
println(getGreeting) // 输出: Hello, World!(可以省略括号)
println(getCurrentTime) // 输出当前时间戳(定义时无括号,调用时通常也不带括号)
3.创建接受变参的方法
如何定义一个函数,它能接收数量不定的参数,并计算它们的累加?例如:getSum(1,2,3) 得到6, getSum(1,2,3,4) 得到10?
【分析】我们需要一个统一的容器,把参数都装起来。
示例:
// 功能:求所有参数的累加
// 变参特点:函数中的参数的个数是不确定的。思路:找一个容器把参数全部装起来!!!
// 写法: 参数类型后面加*
def getSum(args:Int*): Int ={
var sum = 0
for(i <- args){
sum += i // 累加
}
sum
}
示例:
def testTriangle(a:Double, b:Double, c:Double):Boolean = {
}
def main() = {
val r = testTriangle(10,20,30);
println(r);
}
注意:按照 Scala 的约定,对于没有副作用的无参函数,定义时通常省略括号,调用时也不加括号;对于有副作用的无参函数(如打印操作),通常会保留括号。