zoukankan      html  css  js  c++  java
  • scala中的匿名函数 ==> 简单示例

    //定义一个接收消息的函数 getMsg,它有一个参数 msg 用来接收消息的内容。它的函数体是一个匿名函数,匿名函数有一个参数 name 用来接收姓名。

    scala> def getMsg (msg : String) = (name : String) => println(msg + " , " + name)
    getMsg: (msg: String)String => Unit

    //调用函数getMsg,说 hello

    scala> val msg = getMsg("hello")
    msg: String => Unit = <function1>

    现在得到了一个返回值,它是一个匿名函数。

    //调用这个匿名函数,跟 Mike 说 hello

    scala> msg("Mike")
    hello , Mike

    //一步到位的跟 Luffy 说 hi

    scala> getMsg("hi")("Luffy")
    hi , Luffy

    这个例子中的函数getMsg实现了一个简单的发送消息的功能。但是我们可以发送不同的消息内容,而且可以向不同的人发送。这就极大的扩展了函数的功能。getMsg实际上就是scala中的高阶函数,它返回一个匿名函数。

    将函数的定义 getMsg: (msg: String)String => Unit 分解开来:

    函数名称 :getMsg,

    参数列表 :变量msg 类型为String

    返回值 : String => Unit  表示一个接收String类型参数,没有返回值的匿名函数

    ==============================================华丽分割线==============================================================

    换一种形式来实现这个功能。

    //定义一个打招呼的函数 sayHello,传入一个name,表示跟谁打招呼。

    scala> def sayHello (name :String) = println("hello," + name)
    sayHello: (name: String)Unit

    //定义一个函数 greeting,它也是一个高阶函数,但它与getMsg的定义不同。它接收两个参数:一个是匿名函数,要求这个匿名函数是一个接收String类型参数,没有返回值的函数。另外一个参数是String类型的变量。

    scala> def greeting(func :(String => Unit),name :String) = {func(name)}
    greeting: (func: String => Unit, name: String)Unit

    //调用函数 ,跟 Mike 打个招呼吧。

    scala> greeting(sayHello,"Mike")
    hello,Mike

    看似现在功能不如gegMsg强大吖。只能说hello,不能说别的了?

    其实并不是。这个函数的功能可能更大强大,因为它可以接收任意的一个符合它参数定义的匿名函数作为参数。比如,我们可以定义一个说hi的函数

    //定义另外一个打招呼的函数

    scala> def sayHi(name :String) = println("hi," + name)
    sayHi: (name: String)Unit

    //调用这个函数跟 Mike 说 hi 吧

    scala> greeting(sayHi,"Mike")
    hi,Mike

    也就是说,只要一个函数符合 String => Unit 这个定义,它就可以作为参数传入到greeting中。

  • 相关阅读:
    iOS推送证书从申请到使用
    leetcode
    C++測量一段代码的执行时时间
    UIView的几个枚举定义
    在CDialog::OnInitDialog设置DEFAULT-BUTTON的注意事项
    转:VS中的路径宏 vc++中OutDir、ProjectDir、SolutionDir各种路径
    COM学习笔记
    关于StdAfx.h和StdAfx.cpp
    解决:CWnd::SetWindowText报Assertion failure
    四种DLL:NON-MFC DLL, Regular DLL Statically/Dynamically Linked to MFC, MFC Extension DLL
  • 原文地址:https://www.cnblogs.com/rabbit624/p/10532746.html
Copyright © 2011-2022 走看看