scala function
时间: 2024-12-27 12:22:16 浏览: 3
### Scala 函数定义与用法
#### 标准函数定义
在Scala中,最常见的是通过`def`关键字来定义函数。这种定义方式允许指定函数的名字、参数列表以及返回类型。当省略返回类型时,编译器会尝试自动推断它。
```scala
// 定义一个简单的加法函数
def add(a: Int, b: Int): Int = {
a + b
}
```
上述例子展示了如何创建接受两个整数作为输入并返回它们和的简单函数[^1]。
#### 值函数(部分应用)
除了传统的函数定义外,还可以将函数赋值给变量,并采用特殊形式表示未完全应用的函数—即只提供了一部分所需参数的情况。这通常是在已有函数基础上构建新版本的一种手段。
```scala
def greet(name: String) = println(s"Hello $name")
val sayHiToJohn = greet _
sayHiToJohn("John")
```
这里`sayHiToJohn`实际上是一个指向原始`greet`方法的部分应用实例;调用它相当于再次传递字符串参数给原函数[^2]。
#### 匿名函数
对于不需要命名的小型逻辑片段来说,可以直接使用匿名函数而无需正式声明。这些临时性的表达式遵循`(参数列表) => 表达式`模式:
```scala
val square = (x: Double) => x * x
println(square(5)) // 输出:25.0
```
此代码段说明了怎样快速建立一个用于计算平方值得匿名操作符[^3]。
#### 高阶函数与嵌套定义
高阶函数是指那些能够接收其他函数作为参数或返回另一个函数的结果的方法。此外,在某些情况下也可以在一个外部函数体内再定义新的内部辅助函数,从而实现更复杂的控制流设计。
```scala
object HigherOrderExample {
def applyOperation(op: (Int, Int) => Int)(a: Int, b: Int): Int =
op(a, b)
def main(args: Array[String]): Unit = {
val sumResult = applyOperation(_ + _)(4, 7)
println(sumResult) // 输出:11
def nestedFunc(x: Int): Int = {
def inner(y: Int): Int = y * 2
inner(x)
}
println(nestedFunc(3)) // 输出:6
}
}
```
这段示例不仅体现了高阶特性的运用还包含了局部范围内定义子过程的情形[^4]。
#### 函数柯里化
为了支持多阶段处理或是延迟求值场景下的灵活性需求,Scala提供了所谓的“柯里化”。这意味着原本一次性传入多个参数的操作被拆分成连续几次单独调用来完成相同任务的过程。
```scala
def multiplyCurried(x: Int)(y: Int): Int = x * y
val double = multiplyCurried(2)_ // 创建了一个等待第二个参数的新函数
println(double(4)) // 结果为8
```
此处演示了如何利用柯里化的特性简化特定类型的组合运算。
阅读全文