带参方法,只有一个参数的时候
- 完整写法
def m0(s: String): String = {
return "hello " + s
}
return可省略,方法体最后一行作为返回值
def m1(s: String): String = {
"hello " + s
}
- 方法体只有一行代码时,可省略大括号
{}
def m2(s: String): String = "hello " + s
- 返回值类型若能推断出,那么可省略冒号和返回值类型(
: String)
def m3(s: String) = "hello " + s
无参方法
- 定义方法时 不省略小括号,调用时 小括号可加可不加(IDE的建议是加上)
def m1() = "hello"
println(m1())
println(m1)
- 定义方法时 省略小括号,调用时 必须省略小括号
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
匿名函数
- 续上,把
f0改成匿名函数:省略val和函数名称
def m1(f: (Int, Int) => Double): Unit = println(f(2, 3) + 1)
m1((i: Int, j: Int) => i + j + 0.5)
- 如果参数只出现一次,可简化为
_
def m1(f: (Int, Int) => Double): Unit = println(f(2, 3) + 1)
m1(_ + _ + 0.5)

闭包和柯里化
- 闭包
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
}
- 里面的函数写成匿名函数
def f1(a: Int, b: Int, c: Int): (Int, Int) => Int = {
(x: Int, y: Int) => a * x + b * y + c
}
- 调用方式
f1(1, 2, 3)(2, 1) // 返回值:1*2+2*1+3=7
- 柯里化(写成连续括号)
def f1(a: Int, b: Int, c: Int)(x: Int, y: Int): Int = {
a * x + b * y + c
}
本文介绍了Scala编程中的核心概念,包括简洁的定义方法、无参及带参方法的多种写法、函数作为参数的应用、匿名函数的使用场景以及闭包和柯里化的高级特性。
768

被折叠的 条评论
为什么被折叠?



