精华内容
下载资源
问答
  • 匿名函数

    万次阅读 2020-01-17 13:48:45
    匿名函数 匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值。当然,也有其它应用的情况。 匿名函数目前是通过Closure...

    匿名函数 

    匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值。当然,也有其它应用的情况。

    匿名函数目前是通过 Closure 类来实现的。

    Example #1 匿名函数示例

    <?php
    echo preg_replace_callback('~-([a-z])~', function ($match) {
        return strtoupper($match[1]);
    }, 'hello-world');
    // 输出 helloWorld
    ?>

    闭包函数也可以作为变量的值来使用。PHP 会自动把此种表达式转换成内置类 Closure 的对象实例。把一个 closure 对象赋值给一个变量的方式与普通变量赋值的语法是一样的,最后也要加上分号:

    Example #2 匿名函数变量赋值示例

    <?php
    $greet = function($name)
    {
        printf("Hello %s\r\n", $name);
    };

    $greet('World');
    $greet('PHP');
    ?>

    闭包可以从父作用域中继承变量。 任何此类变量都应该用 use 语言结构传递进去。 PHP 7.1 起,不能传入此类变量: superglobals、 $this 或者和参数重名。

    Example #3 从父作用域继承变量

    <?php
    $message = 'hello';

    // 没有 "use"
    $example = function () {
        var_dump($message);
    };
    echo $example();//null

    // 继承 $message
    $example = function () use ($message) {
        var_dump($message);
    };
    echo $example();//hello

    //更改自定义变量时
    $message = 'world';
    echo $example();//hello

    // 重置message
    $message = 'hello';

    //变量前面用&引用
    $example = function () use (&$message) {
        var_dump($message);
    };
    echo $example();//hello

    // 父作用域中更改的值
    // 反映在函数调用中
    $message = 'world';
    echo $example();//world 引用生效

    // 闭包还可以接受常规参数
    $example = function ($arg) use ($message) {
        var_dump($arg . ' ' . $message);
    };
    $example("hello");
    ?>

    以上例程的输出类似于:

    Notice: Undefined variable: message in /example.php on line 6
    NULL
    string(5) "hello"
    string(5) "hello"
    string(5) "hello"
    string(5) "world"
    string(11) "hello world"
    展开全文
  • C# 匿名函数_C# 匿名函数使用整理

    千次阅读 2021-02-06 10:41:28
    一、C# 匿名函数简介 匿名方法:没有名字的方法,不需要名字的方法。 匿名方法是没有名称只有主体的方法。 匿名方法和委托搭载使用。 匿名方法 精确点可以改叫 匿名函数。 委托是用于引用与其具有相同标签的...

    一、C# 匿名函数简介

    匿名方法:没有名字的方法,不需要名字的方法。

    匿名方法是没有名称只有主体的方法。

    匿名方法和委托搭载使用。

    匿名方法 精确点可以改叫 匿名函数。

    委托是用于引用与其具有相同标签的方法。换句话说,您可以使用委托对象调用可由委托引用的方法。

    匿名方法(Anonymous methods) 提供了一种传递代码块作为委托参数的技术。

    在匿名方法中您不需要指定返回类型,它是从方法主体内的 return 语句推断的。

     

    二、 C# 匿名函数使用场景

    1. delegate 委托匿名方法

        //委托
        delegate int CalcuteSum(int num1,int num2);
    
            static void ObjectTest1()
            {
                //委托匿名方法1
                CalcuteSum calcuate1 = delegate (int num1, int num2)
                {
    
                    return num1 + num2;
                };
    
                int result = calcuate1(1, 2);
                Console.WriteLine(result);//3
    
                //委托匿名方法1
                calcuate1 = delegate (int num1, int num2)
                {
                    return num1 + num2 + 1;
                };
    
    
                int result2 = calcuate1(1, 2);
                Console.WriteLine(result2);//4
    
                //委托静态方法
                calcuate1 = TestSum;
                int result3 = TestSum(1, 2);
                Console.WriteLine(result3);//5
            }
    
            static int TestSum(int num1, int num2)
            {
                return num1 + 1 + num2 + 1;
            }

    2. 匿名方法 和  Lamda表达式

       从 C# 3 开始,lambda 表达式提供了一种更简洁和富有表现力的方式来创建匿名函数。 使用 => 运算符构造 lambda 表达式:

    Func<int, int, int> sum = (a, b) => a + b;
    Console.WriteLine(sum(3, 4));  // output: 7

     

    3.方便开发和使用的委托  Action,Func

    Action: 没有返回类型的委托定义。

    Action greet = delegate { Console.WriteLine("Hello!"); };
    greet();
    Action<int, int> getNum = delegate (int num1, int num2)
    {
        var result = num1 * num2;
    
        Console.WriteLine(result);
    };

    Func :需要返回类型的委托定义。

    Func<int, int, int> sum = static delegate (int a, int b) { return a + b; };
    Console.WriteLine(sum(10, 4));  // output: 14

     

     

    更多:

    C# 匿名对象_C#匿名类型_C# 匿名对象使用整理

    C# 数组_C#动态数组详解整理

    DotNet 开发项目类型整理_C#开发项目类型整理

     

    展开全文
  • 什么是匿名函数

    千次阅读 2013-03-13 13:11:22
    一、什么是匿名函数? 在Javascript定义一个函数一般有如下三种方式: 函数关键字(function )语句:function fnMethodName(x) { alert(x); } 函数字面量(Function Literals):var fnMethodName = function (x) { ...
    一、什么是匿名函数?
    在Javascript定义一个函数一般有如下三种方式:
    函数关键字(function )语句:function fnMethodName(x) {
        alert(x);
    }
        函数字面量(Function Literals):var fnMethodName = function (x) {
        alert(x);
    }
        Function()构造函数:var fnMethodName = new Function('x', 'alert(x);')
            上面三种方法定义了同一个方法函数fnMethodName,第1种就是最常用的方法,后两种都是把一个函数复制给变量fnMethodName,而这个函数是没有名字的,即匿名函数。实际上,相当多的语言都有匿名函数。
            二、函数字面量和Function()构造函数的区别
            虽然函数字面量是一个匿名函数,但语法允许为其指定任意一个函数名,当写递归函数时可以调用它自己,使用Function()构造函数则不行。var f = function fact(x) {
        if (x <  = 1)
            return 1;
        else
            return x * fact(x - 1);
    };
        Function()构造函数允许运行时Javascript代码动态的创建和编译。在这个方式上它类似全局函数eval()。
        Function()构造函数每次执行时都解析函数主体,并创建一个新的函数对象。所以当在一个循环或者频繁执行的函数中调用Function()构造函数的效率是非常低的。相反,函数字面量却不是每次遇到都重新编译的。
        用Function()构造函数创建一个函数时并不遵循典型的作用域,它一直把它当作是顶级函数来执行。var y = "global"; function constructFunction() {
        var y = "local";
        return new Function("return y"); // 无法获取局部变量}alert(constructFunction()()); // 输出 "global"
        和函数关键字定义相比Function()构造器有自己的特点且要难以使用的多,所以这项技术通常很少使用。而函数字面量表达式和函数关键字定义非常接近。考虑前面的区别,虽然有消息说字面量的匿名函数在OS X 10.4.3下的某些webkit的引擎下有bug,但我们平常所说的匿名函数均指采用函数字面量形式的匿名函数。更多详细内容可以阅读《JavaScript : The Definitive Guide,
        5th Edition》的Functions那章。
        三、匿名函数的代码模式
        昨天hedger wang在他的blog介绍了几种匿名函数的代码模式:
        错误模式:其无法工作,浏览器会报语法错。
        function () {
            alert(1);
        }
        ();
        函数字面量:首先声明一个函数对象,然后执行它。(function () {
            alert(1);
        })();
        优先表达式:由于Javascript执行表达式是从圆括号里面到外面,所以可以用圆括号强制执行声明的函数。(function () {
            alert(2);
        }
            ());
        Void操作符:用void操作符去执行一个没有用圆括号包围的一个单独操作数。void function () {
            alert(3);
        }
        ()
        这三种方式是等同的,hedger wang因为个人原因比较喜欢第3种,而在实际应用中我看到的和使用的都是第1种。
        四、匿名函数的应用
        《Javascript的一种模块模式》中的第一句话就是“全局变量是魔鬼”。配合var关键字,匿名函数可以有效的保证在页面上写入Javascript,而不会造成全局变量的污染。这在给一个不是很熟悉的页面增加Javascript时非常有效,也很优美。实际上,YUI以及其相应的范例中大量使用匿名函数,其他的Javascript库中也不乏大量使用。
        Javascript的函数式编程(functional programming)的基石。具体请看《用函数式编程技术编写优美的 JavaScript》和《函数式JavaScript编程指南》。
    展开全文
  • ![图片说明](https://img-ask.csdn.net/upload/201605/06/1462510551_153694.jpg) 求详细说明为什么其中test=3明白 然后匿名函数中的匿名函数怎么调用 如果还有fn(4) fn(5) 为什么传入的都是b的值
  • C++ 匿名函数

    千次阅读 2019-02-25 14:19:15
    匿名函数中,[]里面用来捕获函数外部的变量,而()里面就是匿名函数的参数,{}里面就是函数的执行代码。 匿名函数,也成lambda函数或lambda表达式; 基础示例 #include &lt;iostream&gt; using ...

    1.概述

    匿名函数(英文名:lambda)就是没有名字的函数。最简单的匿名函数是[](){},它没有参数也没有返回值。在匿名函数中,[]里面用来捕获函数外部的变量,而()里面就是匿名函数的参数,{}里面就是函数的执行代码。

    匿名函数,也成lambda函数或lambda表达式;

    基础示例

    #include <iostream>  
      
    using namespace std;  
      
    int main()  
    {  
        auto func = [] () { cout << "Hello world"; };  
        func(); // now call the function  
    }
    

    其中func就是一个lambda函数。我们使用auto来自动获取func的类型,这个非常重要。定义好lambda函数之后,就可以当这场函数来使用了。

    2.lambda表达式

    Lambda表达式具体形式如下:

    [capture](parameters)->return-type{body}
    

    如果没有参数,空的圆括号()可以省略.返回值也可以省略,如果函数体只由一条return语句组成或返回类型为void的话.形如:

    [capture](parameters){body}
    

    下面举了几个Lambda函数的例子:

    [](int x, int y) { return x + y; } // 隐式返回类型 
    [](int& x) { ++x; } // 没有return语句 -> lambda 函数的返回类型是'void' 
    []() { ++global_x; } // 没有参数,仅访问某个全局变量 
    []{ ++global_x; } // 与上一个相同,省略了()
    

    可以像下面这样显示指定返回类型:

    [](int x, int y) -> int { int z = x + y; return z; }
    

    在这个例子中创建了一个临时变量z来存储中间值. 和普通函数一样,这个中间值不会保存到下次调用. 什么也不返回的Lambda函数可以省略返回类型, 而不需要使用 -> void 形式.

    2.2 Lambda函数中的变量截取

    Lambda函数可以引用在它之外声明的变量. 这些变量的集合叫做一个闭包. 闭包被定义在Lambda表达式声明中的方括号[]内. 这个机制允许这些变量被按值或按引用捕获.下面这些例子就是:

    []			//不截取任何变量,试图在Lambda内使用任何外部变量都是错误的(全局变量除外).
    [&]			//截取外部作用域中所有变量,并作为引用在函数体中使用
    [=] 		//截取外部作用域中所有变量,并拷贝一份在函数体中使用
    [=, &foo]   //截取外部作用域中所有变量,并拷贝一份在函数体中使用,但是对foo变量使用引用
    [bar]   	//截取bar变量并且拷贝一份在函数体重使用,同时不截取其他变量
    [this]		//截取当前类中的this指针。如果已经使用了&或者=就默认添加此选项。
    -----------------------------
    [x, &y]  	//x 按值捕获, y 按引用捕获.
    [&, x]		//x显式地按值捕获. 其它变量按引用捕获
    [=, &z]		//z按引用捕获. 其它变量按值捕获
    

    3.Lambda函数和STL

    lambda函数的引入为STL的使用提供了极大的方便。比如下面这个例子,当你想便利一个vector的时候,原来你得这么写:

    vector<int> v;  
    v.push_back( 1 );  
    v.push_back( 2 );  
    //...  
    for ( auto itr = v.begin(), end = v.end(); itr != end; itr++ )  
    {  
        cout << *itr;  
    }  
    

    现在有了lambda函数你就可以这么写

    vector<int> v;  
    v.push_back( 1 );  
    v.push_back( 2 );  
    //...  
    for_each( v.begin(), v.end(), [] (int val)  
    {  
    	cout << val;  
    } );  
    

    而且这么写了之后执行效率反而提高了。因为编译器有可能使用”循环展开“来加速执行过程(计算机系统结构课程中学的)。
    http://www.nwcpp.org/images/stories/lambda.pdf 这个PPT详细介绍了如何使用lambda表达式和STL

    参考资料:
    https://blog.csdn.net/xiaoguyin_/article/details/79798362
    https://www.cnblogs.com/pzhfei/archive/2013/01/14/lambda_expression.html
    https://www.cnblogs.com/lidabo/p/3908663.html

    展开全文
  • 匿名函数、自执行函数,自执行匿名函数和立即执行的函数表达式区别 今天在写代码的时候发现对自执行函数有点懵,便去查询资料。然后紧接着自执行匿名函数,立即执行函数,匿名函数一窝蜂的出来了,借此就好好谈谈这...
  • 函数定义 匿名函数

    2016-12-23 21:48:45
    匿名函数 函数 定义
  • matlab @匿名函数

    万次阅读 多人点赞 2018-12-13 22:23:29
    什么是匿名函数匿名函数是不存储在程序文件中、但与数据类型是 function_handle 的变量相关的函数。匿名函数可以接受输入并返回输出,就像标准函数一样。但是,它们可能只包含一个可执行语句。 例如,创建...
  • scala 匿名函数

    千次阅读 2016-11-20 23:27:35
    1.匿名函数初探Scala 中定义匿名函数的语法很简单,箭头左边是参数列表,右边是函数体,参数的类型是可省略的,Scala 的类型推测系统会推测出参数的类型。使用匿名函数后,我们的代码变得更简洁了。val numIncOne = ...
  • matlab匿名函数

    千次阅读 2019-01-19 21:09:08
    什么是匿名函数匿名函数是不存储在程序文件中、但与数据类型是 function_handle 的变量相关的函数。匿名函数可以接受输入并返回输出,就像标准函数一样。但是,它们可能只包含一个可执行语句。 例如,创建用于...
  • php的匿名函数和闭包函数

    万次阅读 2018-04-11 16:17:00
    引言:匿名函数和闭包函数都不是特别高深的知识,但是很多刚入门的朋友却总是很困惑,因为大家习惯上写了函数就是用来调用的,匿名函数和闭包函数做什么用的? 匿名函数 php官方解释如下: 匿名函数...
  • python匿名函数

    千次阅读 2018-03-01 10:10:01
    匿名函数通常是创建了可以被调用的函数,它返回了函数,而并没有将这个函数命名,普通函数需要去依靠函数名去调用而匿名函数没有,所以需要把这个函数对象复制给某个变量进行调用 lambda有时被叫做匿名函数也就是这...
  • 然后就上网查了一番,现在终于大白于天下,整理记录一下吧~首先要知道什么是匿名函数,我们知道函数的声明方式有以下两种:function fn() {} // 声明式var fn = function(){} // 赋值表达式然后调用这个函数的时候就...
  • C++中Lambda函数(匿名函数)

    千次阅读 2018-07-31 09:54:20
    什么C++11为什么要弄出来匿名函数这个机制? 匿名函数就是没有名字的函数。有一些函数只是临时用一下,而且业务逻辑也比较的简单,相当于是临时工,就没必要给它定义成一个正常函数(包含有函数名,很正式的那种...
  • javascript匿名函数

    千次阅读 2015-01-13 19:02:52
    此前在做node.js项目的时候,整天与匿名函数打交道。
  • TypeScript 匿名函数

    千次阅读 2019-12-18 09:04:31
    匿名函数是一个没有函数名的函数。 匿名函数在程序运行时动态声明,除了没有函数名外,其他的与标准函数一样。 我们可以将匿名函数赋值给一个变量,这种表达式就成为函数表达式。 参考来源:...
  • scala中匿名函数 Scala中的匿名函数 (Anonymous functions in Scala) A function with no name is an anonymous function which is also known as function literal. This type of functions is used when the user ...
  • Scala 匿名函数

    千次阅读 2016-03-14 21:30:38
    1. 创建一个匿名函数 , 用变量res0表示; 2 可将上面的函数写作下面这种形式 3 多个参数的匿名函数 4 没有参数的匿名函数
  • Python匿名函数

    千次阅读 2020-03-26 13:26:42
    今天这个知识点比较简单,所以我们今天发两篇!!! Python的匿(nì)名函数由关键字lambda来创建,我们先看个例子: ...所以我们发现:匿名函数的使用和普通的函数其实是一样的,唯一的区别就是在于普...
  • lambda匿名函数

    千次阅读 2019-01-06 23:11:00
    1、匿名函数:没有函数名字,用lambda声明 2、匿名函数的格式: lambda arg1,arg2,…argn:expression  冒号是分隔符,冒号前是函数的参数,冒号后是一个表达式 3、匿名函数不需要用return,后面的表达式就是...
  • 函数表达式:使用function声明函数,但未指定函数名,将匿名函数赋予一个变量。 var setFn = function() { // coding } 匿名函数:使用function关键字声明函数,但未指定函数名。匿名函数属于函数表达式,匿...
  • MATLAB匿名函数

    千次阅读 2017-09-19 22:31:51
    匿名函数的基本定义fhandle=@(arglist)expr其中,expr是具体的函数表达式,arglist是指定的函数自变量。具体请见下面示例f=@(x)x.^2; >> fx=f(1:10) fx = 1 4 9 16 25 36 49 64 81 100 >> g=@(x,y)x.^2+y.^2; >> gxy...
  • 匿名函数的使用

    千次阅读 2016-04-27 10:49:29
    对,这就是匿名函数,没什么特别的,和一般函数结构神似,唯独少了个函数名。而且这个函数可以作为一个值被赋予一个变量或者对象属性。这种特性使得拥有匿名函数的编程语言再设计一些应用时,更为灵活。 匿名函数和...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 292,145
精华内容 116,858
关键字:

匿名函数是什么