Scala 函数式编程_函数是Scala中的一等公民
Scala 函数式编程_函数是Scala中的一等公民
秋风醉了 发表于3年前
Scala 函数式编程_函数是Scala中的一等公民
  • 发表于 3年前
  • 阅读 24
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   

摘要: Scala 函数式编程_函数是Scala中的一等公民

Scala 函数式编程_函数是Scala中的一等公民

一等公民表现在:

1.可以传递、赋值

2.嵌套函数和匿名函数

3.具有高阶函数

4.偏应用

5.闭包


1.可传递

first_class_function.scala

// 接收一个函数作为参数
def func(f: () => String) = println(f())
func(() => "hello world!") //传递一个匿名函数


def foo() = "hello world!"
func(foo) // 把foo函数作为一个参数传递

val fun = (x: Int) => print(x) // 定义一个函数 fun
fun(2)

运行并输出,

C:\WorkSpace6-scala\scala-train\src\com\usoft>scala first_class_function.scala

hello world!

hello world!

2


2.嵌套函数

def foo() {
  def bar() {
    println("hello world!")
  }
  bar //返回一个函数
}

foo //调用一个无参函数,可以不用加括号


3.匿名函数

lambda:函数字面量(Function  literal)

(x:Int,y:Int)  =>  x  +y

  参数  右箭头  函数体

上面语句产生一段匿名函数,类型为(Int,Int)  =>  Int

注意:scala中函数的参数个数为0到22个


4.高阶函数

第一种:用函数做参数的函数。eg:

def f2(f: () => Unit) {
  f()
}

def f1() {
  println(1)
}

f2(f1)
f2(() => println("hello world!"))

第二种:产生的结果是一个函数的函数。eg:

def hf(): Int => Int = x => x + 1

val fun = hf

fun(2) //output:3


5.函数柯里化

//当函数具有多个参数时
def sum(x: Int, y: Int) = x + y

//参数被打散后,两个参数分开
def sum2(x: Int)(y: Int) = x + y

sum2(1)(2) //output:3


// 直接返回一个函数
def first(x: Int) = (y: Int) => x + y
first(1)(2)

函数链

把一个带有多个参数的函数,转换为多个只有一个参数的函数来执行

f(1)(2)(3)  相当于  ((f(1))(2))(3)

带入参数  1执行  fa(1)  然后  带入参数2执行  fb(2)  接着带入参数3执行fc(3)  最后得到结果


6.闭包

在java中匿名内部类访问局部变量是,局部变量必须声明为final(类似闭包的实现)

scala>  (x:  Int)  =>  x  +  more
<console>:8: error: not found: value more
               (x:  Int)  =>  x  +  more
                                    ^

scala> val more = 1
more: Int = 1

scala> val addMore = (x: Int) => x + more
addMore: Int => Int = <function1>

scala> addMore(1)
res1: Int = 2

如下代码,

val more = 1
val addMore = (x: Int) => x + more

val res = addMore(1)
println(res)


共有 人打赏支持
粉丝 215
博文 610
码字总数 434752
×
秋风醉了
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: