函数参数

79 阅读3分钟

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 的约定,对于没有副作用的无参函数,定义时通常省略括号,调用时也不加括号;对于有副作用的无参函数(如打印操作),通常会保留括号。