zoukankan      html  css  js  c++  java
  • (转)拉姆达表达式(Lambda Expressions) =>写法的涵义

     

     

    让我们先看一个简单的拉姆达表达式:

    x=>x/2

    这个表达式的意思是:x为参数,对x进行相应的操作后的结果作为返回值。

    通过这个拉姆达表达式,我们可以看到:

    这个表达式没有任何类型信息,但这并不代表拉姆达表达式是和类型无关的。在实际运用上,编译器会根据表达式的上下文判断上述x的类型及返回值的类型。例如:

    using System;
    using System.Linq;
    public class LambdaTest
    {
         static void Main() {
         Func<int, double> expr = x => x / 2;
         int someNumber = 9;
         Console.WriteLine( "Result: {0}", expr(someNumber) );
      }
    }

    上述代码中,加粗部分为拉姆达表达式。Func<>为 delegate System.Func<T,TResult>

    上述运行结果为:Result:4

    根据我们学习的数学知识,9/2应当结果是4.5,为什么上述结果会是4而不是4.5呢?是因为x是整型,x/2的结果也是整型,虽然在上述我们拉姆达表达式中,我们指明结果是double,但x/2这个表达式,由于x是整型,故计算出来的结果已被截掉小数,然后再转换为double,故结果是4,而不是4.5

    要使结果是4.5,则只需定义上述相关语句为 Func<double,double> expr = x => x / 2 即可。

    无参数的拉姆达表达式:

    using System;
    using System.Linq;
    public class LambdaTest
    {

    static void Main() {
    int counter = 0;
    WriteStream( () => counter++ );
    Console.WriteLine( "Final value of counter: {0}",counter );

    }
    static void WriteStream( Func<int> counter ) {
       for( int i = 0; i < 10; ++i ) {
        Console.Write( "{0}, ", counter() );
      }
        Console.WriteLine();
      }
    }

  • 相关阅读:
    踩踩踩
    c语言可变参
    C++开发者都应该使用的10个C++11特性
    c++11 条件变量 生产者-消费者 并发线程
    c++11 线程
    C++ 虚函数表解析 继承
    坐标系
    C++ 容器:顺序性容器、关联式容器和容器适配器
    全面深入介绍C++字符串:string类
    做一个懒COCOS2D-X程序猿(一)停止手打所有cpp文件到android.mk
  • 原文地址:https://www.cnblogs.com/wangyt223/p/4188455.html
Copyright © 2011-2022 走看看