######################### 高阶函数 #########################
scala> def sum(x: Int) = x + 1
sum: (x: Int)Int
scala> println(sum(5))
6
=======================================
Lamda表达式
scala> val sum: Int => Int = x => x + 1
sum: Int => Int = <function1>
scala> println(sum(5))
6
------------------------------------------
# 省略返回值类型
scala> val sum = (x: Int) => x + 1
sum: Int => Int = <function1>
scala> println(sum(5))
6
=================================
scala> def fact(n: Int): Int = {
| n match {
| case 0 => 1
| case n if n > 0 => n * fact(n - 1)
| }
| }
fact: (n: Int)Int
scala> println(fact(5))
120
scala> println(fact(0))
1
==================================
scala> :paste
// Entering paste mode (ctrl-D to finish)
val inc: Int => Int
= x => x + 1
println(inc(0))
// Exiting paste mode, now interpreting.
1
inc: Int => Int = <function1>
-----------------------------------------------
scala> def add(x:Int, y:Int): Int = x + y
add: (x: Int, y: Int)Int
scala>
scala> println(add(2, 3))
5
scala> println(add(9, 3))
12
#########################################################
######################### 匿名函数 #########################
scala> val a = 5
a: Int = 5
scala> val b: Int => Int = x => x + 1
b: Int => Int = <function1>
scala> println(b(a))
6
------------------------------------------
scala> println(((x => x + 1): Int => Int)(5))
6
---------------------------------------------
scala> def mul1 (x: Int, y: Int): Int = x * y
mul1: (x: Int, y: Int)Int
scala> val mul2: (Int, Int) => Int = (x, y) => x * y
mul2: (Int, Int) => Int = <function2>
scala>
scala> println(mul1(2, 3))
6
scala> println(mul2(4, 5))
20
-----------------------------------------------------
scala> def add(x: Int, y: Int): Int = x + y
add: (x: Int, y: Int)Int
scala> println(add(2, 3))
5
scala> def f(g: (Int, Int) => Int) = g(2, 3)
f: (g: (Int, Int) => Int)Int
scala>
scala> def add(x: Int, y: Int): Int = x + y
add: (x: Int, y: Int)Int
scala> val mul: (Int, Int) => Int = (x, y) => x * y
mul: (Int, Int) => Int = <function2>
scala> println(f(add))
5
scala> println(f(mul))
6
------------------------------------
scala> def f(g: (Int, Int) => Int) = g(2, 3)
f: (g: (Int, Int) => Int)Int
scala>
scala> println(f((x, y) => x + y))
5
scala> println(f((x, y) => x * y))
6
----------------------------------------------
scala> def add(x: Int): Int => Int = y => x + y
add: (x: Int)Int => Int
scala> val add2 = add(2)
add2: Int => Int = <function1>
scala>
scala> println(add2(3))
5
scala> println((add(2))(3))
5
scala> println(add(2)(3))
5
-------------------------------
scala> def f(g: (Int, Int) => Int) = g(1, 2)
f: (g: (Int, Int) => Int)Int
scala> def add(x: Int, y: Int): Int = x + y
add: (x: Int, y: Int)Int
scala>
scala> println(f(add))
3
---------------------------------------
scala> def add(x: Int): Int => Int = y => x + y
add: (x: Int)Int => Int
scala>
scala> println(add(2)(6))
8
--------------------------------------
##
scala> def add1(x: Int, y: Int) = x + y
add1: (x: Int, y: Int)Int
scala> def add2(x: Int): Int => Int = y => x + y
add2: (x: Int)Int => Int
scala> def add3: Int => Int => Int = x => y => x + y
add3: Int => (Int => Int)
scala>
scala> println(add1(2,3))
5
scala> println(add2(2)(3))
5
scala> println(add3(2)(3))
5
--------------------------------
scala> def add: Int => Int => Int = x => y => x + y
add: Int => (Int => Int)
scala> val add2 = add(2)
add2: Int => Int = <function1>
scala>
scala> println(add(2)(3))
5
scala> println(add2(3))
5
-------------------------------------
scala> def add(x: Int, y: Int) = x + y
add: (x: Int, y: Int)Int
scala> val add2 = add(2, _: Int)
add2: Int => Int = <function1>
scala>
scala> println(add(2,3))
5
scala> println(add2(3))
5
scala> println((add(2, _: Int))(3))
5