This commit is contained in:
罗祥
2019-06-04 10:35:13 +08:00
parent d09ca11daa
commit 52a294dbe6
8 changed files with 75 additions and 77 deletions

View File

@ -20,7 +20,7 @@
### 1.1 函数与方法
Scala中函数与方法的区别非常小,如果函数作为某个对象的成员,这样的函数被称为方法,否则就是一个正常的函数。
Scala中函数与方法的区别非常小如果函数作为某个对象的成员这样的函数被称为方法否则就是一个正常的函数。
```scala
// 定义方法
@ -32,7 +32,7 @@ println(multi1(3)) //输出 9
println(multi2(3)) //输出 9
```
其实对于定义函数使用val和def并没有区别也可以使用`def`定义函数:
也可以使用`def`定义函数:
```scala
def multi3 = (x: Int) => {x * x}
@ -52,14 +52,14 @@ multi2: Int => Int = $$Lambda$1092/594363215@1dd1a777
scala> def multi3 = (x: Int) => {x * x}
multi3: Int => Int
// 如果有多个参数,则类型(参数类型,参数类型 ...=>返回值类型
// 如果有多个参数,则类型为:(参数类型,参数类型 ...=>返回值类型
scala> val multi4 = (x: Int,name: String) => {name + x * x }
multi4: (Int, String) => String = $$Lambda$1093/1039732747@2eb4fe7
```
### 1.3 一等公民&匿名函数
在Scala中函数是一等公民这意味着不仅可以定义函数并调用它们还可以用匿名的字面量来编写函数并将它们作为值进行传递:
在Scala中函数是一等公民这意味着不仅可以定义函数并调用它们还可以将它们作为值进行传递
```scala
import scala.math.ceil
@ -93,7 +93,7 @@ object ScalaApp extends App {
#### 1. 可变长度参数列表
在Java中如果你想要传递可变长度的参数列表,则需要使用`String ...args`这种语法Scala中等效的语法`args: String*`
在Java中如果你想要传递可变长度的参数需要使用`String ...args`这种形式Scala中等效的表达`args: String*`
```scala
object ScalaApp extends App {
@ -110,7 +110,7 @@ flink
#### 2. 传递具名参数
向函数传递参数时候可以指定具体的名
向函数传递参数时候可以指定具体的参数名。
```scala
object ScalaApp extends App {
@ -127,7 +127,7 @@ object ScalaApp extends App {
#### 3. 默认值参数
可以为函数的参数指定默认值。
在定义函数时,可以为参数指定默认值。
```scala
object ScalaApp extends App {
@ -163,7 +163,7 @@ val addMore = (x: Int) => x + more
这里需要注意的是,闭包捕获的是变量本身,即是对变量本身的引用,这意味着:
+ 闭包外部对自由变量的修改,在闭包内部是可见的;
+ 闭包内部对自由变量的修改,在闭包外部也是可见的
+ 闭包内部对自由变量的修改,在闭包外部也是可见的
```scala
// 声明more变量
@ -239,7 +239,7 @@ object ScalaApp extends App {
x * x
}
// 2.定义高阶函数: 第一个参数是类型为Int => Int的函数,第二个参数为Int类型的值
// 2.定义高阶函数: 第一个参数是类型为Int => Int的函数
def multi(fun: Int => Int, x: Int) = {
fun(x) * 100
}
@ -267,8 +267,8 @@ object ScalaApp extends App {
这里当你调用curriedSum时候实际上是连着做了两次传统的函数调用实际执行的柯里化过程如下
+ 第一次调用接收一个名为x的int参数返回一个用于第二次调用的函数假设x为2则返回函数`2+y`
+ 返回的函数接收Int参数y,并计算并返回值`2+3`的值。
+ 第一次调用接收一个名为`x`的Int参数,返回一个用于第二次调用的函数,假设`x`为2则返回函数`2+y`
+ 返回的函数接收参数`y`,并计算并返回值`2+3`的值。
想要获得柯里化的中间返回的函数其实也比较简单: