【Scala】高阶函数(4)

######################### 高阶函数 #########################

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

  

posted @ 2020-09-24 21:56  初入门径  阅读(138)  评论(0)    收藏  举报