zoukankan      html  css  js  c++  java
  • 比较C#中的委托和Ruby中的block对象

    Ruby中,所谓带块(block)的方法是指对控制结构的抽象,最初设计是用于对循环进行抽象,所以又称迭代器。
    语法:method_name do...end 或 method_name {}

     1#块调用
     2def foo
     3  print yield(5)
     4end
     5
     6foo {|a|
     7    if a > 0
     8        "positive"
     9    elsif a < 0
    10        "negative"
    11    else
    12        "zero"
    13    end
    14}
    15
    16foo()
    17
    18#使用了proc(过程对象)的块调用
    19quux = proc {|a|
    20    if a > 0
    21        "positive"
    22    elsif a < 0
    23        "negative"
    24    else
    25        "zero"
    26    end
    27}
    28
    29def foo(p)
    30    print p.call(5)
    31end
    32
    33foo(quux)
     1//传统委托
     2public delegate string fooDelegate(int a);
     3public string foo(int a)
     4{
     5    if(a > 0)
     6        return "positive";
     7    else if(a < 0)
     8        return "negative";
     9    return "zero";
    10}

    11fooDelegate myD1 = new fooDelegate(foo);
    12Console.WriteLine(myD1(5));
    13
    14//匿名委托 C# 2.0
    15public delegate string fooDelegate(int a);
    16fooDelegate myD1 = delegate(int a)
    17{
    18    if(a > 0)
    19        return "positive";
    20    else if(a < 0)
    21        return "negative";
    22    return "zero";
    23}

    24Console.WriteLine(myD1(5));
    // Action/Func委托 + lambda表达式 C# 3.0
    Action<Func<int, string>> foo = (func)=>{
        Console.WriteLine(func(5));
    };
    Action qoo = () => {
        foo((a) => {
            if(a > 0)
                return "positive";
            else if(a < 0)
                return "negative";
            return "zero";
        });
    };
    qoo();
    
    
    Func<int, string> quux = (a) =>{
        if(a > 0)
            return "positive";
        else if(a < 0)
            return "negative";
        return "zero";
    };
    Action<Func<int, string>> foo = (func)=>{
        Console.WriteLine(func(5));
    };
    foo(quux);
  • 相关阅读:
    Linux中的Diff和Patch
    旧磁带,新风险
    Mac下体验Hexo与Github Pages搭建
    Sublime Text 3 提高工作效率的使用技巧
    PHPExcel对于Excel中日期和时间类型的处理
    做Adsense的一些经验
    使用Fusioncharts实现后台处理进度的前台展示
    iOS: 数据持久化方案
    开发中,理解高内聚、低耦合
    iOS: lame框架将PCM录音转成MP3格式
  • 原文地址:https://www.cnblogs.com/yicone/p/407188.html
Copyright © 2011-2022 走看看