4.2.1 scale定义函数
在Scala中,定义函数的方式非常灵活,支持多种不同的定义方式。以下是一些基本的函数定义方法,我们将使用单个字母或双字母变量来表示参数和返回值:
object Test16_1{
/**
(一)函数的字面量语法
(二)把函数作为参数
(三)把函数作为返回值
(四)Scala的函数的闭包
(五)函数的格里化格式
(六)Scala部分应应用函数
**/
//
def sum(x: Int, y: Int): Int = {
x + y
}
def main(args: Array[String]): Unit = {
var sum1=(x:Int,y:Int)=>{
x+y
}
// 简写1. 代码只有一句, 可以省略 { }
var res2 = (x:Int, y:Int) => x+y
// 简写2:形参可以使用占位符来代替
// var sum3 : Int = 1
// (Int,Int) => Int 表示一种类型,是一个函数,需要两个int类型的参数,返回一个int类型的结果
val sum3: (Int, Int) => Int = _ + _
// var res =sum(100,200)
val res = sum3(200, 200)
println(res)
}
}
4.2.2 把函数作为参数
将函数作为参数传递给另一个函数是一种常见的函数式编程技术。这种方式使得代码更加灵活和模块化。
object Test16_2 {
//把函数当做参数来使用
def main(args: Array[String]): Unit = {
//字面量的方式定义函数
var sum = (x:Int ,y:Int)=> x+y
//糕点1
var mul = (x: Int, y: Int) => x * y
// op 本身是一个函数,它的第一个参数是一个函数的类型 。(Int,Int) =>Int 是一个类型
// 美团
var op =(callback:(Int,Int) =>Int, x:Int, y:Int) => {
callback(x,y)
}
// var rs = op(sum,100,200)
var rs = op(mul,100,200)
println(rs)
println(sum(100,200))
println(mul(100,200))
}
3. 使用闭包计算结果
类名:Test16_4
知识点:
- 闭包:函数可以捕获并使用外部定义的变量。
参考点:
- 使用元组和闭包来计算和返回结果。
文章:
Test16_4
示例展示了如何使用闭包来计算两个数的加倍和。这是一个简单的例子,说明了闭包如何在函数式编程中用于存储状态。
object Test16_4 {
def main(args: Array[String]): Unit = {
val d = (3, 4)
println(s"加倍加法的结果是:$d")
}
}
3. 函数的柯里化
类名:Test16_5
知识点:
- 柯里化:将一个多参数的函数转换成多个单参数函数的序列。
参考点:
- 使用柯里化来定义和使用函数。
文章:
Test16_5
示例展示了Scala中的柯里化,这是一种将多参数函数转换为一系列单参数函数的技术。这使得函数调用更加灵活。
object Test16_5 {
def fn(x: Int)(y: Int)(z: Int) = {
println(x, y, z)
}
def main(args: Array[String]): Unit = {
var f = fn(1)(2) _ // 使用下划线作为占位符
f(30)
}
}
通过这些示例,我们可以看到Scala如何支持函数式编程的基本概念,如函数作为参数和返回值,以及柯里化。这些特性使得Scala在处理复杂逻辑和数据转换时非常强大和灵活