大数据(7e)Scala方法和函数的简化过程

本文介绍了Scala编程中的核心概念,包括简洁的定义方法、无参及带参方法的多种写法、函数作为参数的应用、匿名函数的使用场景以及闭包和柯里化的高级特性。

带参方法,只有一个参数的时候

  1. 完整写法
def m0(s: String): String = {
  return "hello " + s
}
  1. return可省略,方法体最后一行作为返回值
def m1(s: String): String = {
  "hello " + s
}
  1. 方法体只有一行代码时,可省略大括号{}
def m2(s: String): String = "hello " + s
  1. 返回值类型若能推断出,那么可省略冒号和返回值类型(: String
def m3(s: String) = "hello " + s

无参方法

  1. 定义方法时 不省略小括号,调用时 小括号可加可不加(IDE的建议是加上)
def m1() = "hello"
println(m1())
println(m1)
  1. 定义方法时 省略小括号,调用时 必须省略小括号
def m1 = "dalang"
// println(m1()) 报错
println(m1)

函数

val f0: (Int, Int) => Double = (i: Int, j: Int) => {i + j + 0.5}

可以省略: (Int, Int) => Double和大括号

val f0 = (i: Int, j: Int) => i + j + 0.5

函数作为参数

  • 高阶函数:参数为函数 的 方法或函数
  • 写法:(传入数据类型) => 返回数据类型
  • 示例写法:(Int, Int) => Double
def m1(f: (Int, Int) => Double): Unit = println(f(2, 3) + 1)

val f0: (Int, Int) => Double = (i: Int, j: Int) => i + j + 0.5

m1(f0) // f0作为参数传入m1;打印结果:6.5

匿名函数

  1. 续上,把f0改成匿名函数:省略val和函数名称
def m1(f: (Int, Int) => Double): Unit = println(f(2, 3) + 1)

m1((i: Int, j: Int) => i + j + 0.5)
  1. 如果参数只出现一次,可简化为_
def m1(f: (Int, Int) => Double): Unit = println(f(2, 3) + 1)

m1(_ + _ + 0.5)

闭包和柯里化

  1. 闭包
def f1(a: Int, b: Int, c: Int): (Int, Int) => Int = {
  def f2(x: Int, y: Int): Int = {
    return a * x + b * y + c
  }
  return f2
}
  1. 里面的函数写成匿名函数
def f1(a: Int, b: Int, c: Int): (Int, Int) => Int = {
  (x: Int, y: Int) => a * x + b * y + c
}
  1. 调用方式
f1(1, 2, 3)(2, 1)  // 返回值:1*2+2*1+3=7
  1. 柯里化(写成连续括号)
def f1(a: Int, b: Int, c: Int)(x: Int, y: Int): Int = {
  a * x + b * y + c
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小基基o_O

您的鼓励是我创作的巨大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值