Class TestPatterns
'<<1.Self-Defining Functions-自定义函数>>
Public Shared Sub SelfDefining()
Console.WriteLine(":: Pattern: Self-definining function") Dim foo As Action = Sub()
Console.WriteLine("Hi there!") foo = Sub()
Console.WriteLine("Hi again!")
End Sub
End Sub Console.WriteLine("First call (initilization).")
foo()
Console.WriteLine("Second call - use different one now!")
foo()
Console.WriteLine("Third call - still the same.")
foo()
End Sub '<<2.Callback Pattern-回调模式>>
Public Shared Sub Callback()
Console.WriteLine(":: Pattern: Callback pattern")
Console.WriteLine("Calling the function with lambda expression.") CallMe(Function() "The boss.") Console.WriteLine("Back at the starting point.")
End Sub Private Shared Sub CallMe(ByVal caller As Func(Of String))
Console.WriteLine("Received function as parameter - Who called?!")
Console.WriteLine(caller())
End Sub '<<3.Returning Functions-函数作为返回值>>
Public Shared Sub Returning()
Console.WriteLine(":: Pattern: Returning function")
Console.WriteLine("Calling to obtain the method ...")
Dim method As Func(Of Double, Double) = GetProperMethod("sin")
Console.WriteLine("Doing something with the method ...")
Console.WriteLine("f(pi / 4) = {0}", method(Math.PI / ))
End Sub Private Shared Function GetProperMethod(ByVal what As String) As Func(Of Double, Double)
Select Case what
Case "sin"
Return AddressOf Math.Sin
Case "cos"
Return AddressOf Math.Cos
Case "exp"
Return AddressOf Math.Exp
Case Else
Return Function(x) x
End Select
End Function '<<4.Immediately-Invoked Function Expression-立即调用的函数表达式>>
Public Shared Sub IIFE()
Console.WriteLine(":: Pattern: IIFE") DirectCast(Sub(x)
Console.WriteLine(2.0 * x * x - 0.5 * x) End Sub, Action(Of Double))(1.0) DirectCast(Sub(x, y)
Console.WriteLine(2.0 * x * y - 1.5 * x) End Sub, Action(Of Double, Double))(2.0, 3.0)
End Sub '<<5.Immediate Object Initialization-对象即时初始化>>
Public Shared Sub ImmediateObject()
Console.WriteLine(":: Pattern: Immediate object initialization") Dim terminator = New With { _
Key .Typ = "T1000", _
Key .Health = , _
Key .Hit = DirectCast(Function(x)
Return 100.0 * Math.Exp(-x) End Function, Func(Of Double, Double)) _
} Console.WriteLine("Terminator with type {0} has been created.", terminator.Typ)
Console.WriteLine("Let's hit the terminator with 0.5. Rest health would be {0}!", terminator.Hit(0.5))
End Sub '<<6.Init-Time Branching-初始化时间分支>>
Public Shared Sub InitTimeBranching()
Console.WriteLine(":: Pattern: Init-time branching")
Dim loopBody As Action(Of Integer) = Nothing
Console.WriteLine("Select a proper loop body method ...")
Dim r As New Random()
Dim sum As Integer = If r.NextDouble() < 0.5 Then
Console.WriteLine("Selected random choice ...") loopBody = Sub(index)
sum += r.[Next](, )
End Sub
Else
Console.WriteLine("Selected little gauss ...") loopBody = Sub(index)
sum += index
End Sub
End If Console.WriteLine("Execute the loop ...") For i As Integer = To
loopBody(i)
Next Console.WriteLine("Loop has finished with result sum = {0}.", sum)
End Sub End Class

引用于:http://www.cnblogs.com/gaochundong/p/lambda_design_patterns.html#immediately_invoked_function_expression_pattern

Lambda模式的更多相关文章

  1. 大数据小视角4:小议Lambda 与 Kappa 架构,不可变数据的计算探索

    这个系列文章之前因为私事荒废了很久,继续更新--之前与老大谈论架构时,老大和我聊了聊分布式数据处理之中的Lambda结构,之前在<Designing Data-Intensive Applica ...

  2. [搬运]在C#使用.NET设计模式的新观点

    原文地址:http://www.dotnetcurry.com/dotnet/1092/dotnet-design-patterns 软件开发有许多设计模式.其中一些模式非常受欢迎.说几乎所有的模式都 ...

  3. .NET面试题系列(一)基本概念

    什么是CLR CLR常用简写词语,CLR是公共语言运行库(Common Language Runtime)和Java虚拟机一样也是一个运行时环境,它负责资源管理(内存分配和垃圾收集等),并保证应用和底 ...

  4. 通过Flink实现个推海量消息数据的实时统计

    背景 消息报表主要用于统计消息任务的下发情况.比如,单条推送消息下发APP用户总量有多少,成功推送到手机的数量有多少,又有多少APP用户点击了弹窗通知并打开APP等.通过消息报表,我们可以很直观地看到 ...

  5. Webflux请求处理流程

    spring mvc处理流程 在了解SpringMvc的请求流程源码之后,理解WebFlux就容易的多,毕竟WebFlux处理流程是模仿Servlet另起炉灶的. 下面是spring mvc的请求处理 ...

  6. func-spring-boot-starter 快速上手

    func-spring-boot-starter test 项目地址 func-spring-boot-starter项目地址: https://gitee.com/yiur/func-spring- ...

  7. 匿名函数托管 func-spring-boot-starter

    匿名函数托管 func-spring-boot-starter 项目地址 func-spring-boot-starter开源项目地址: https://gitee.com/yiur/func-spr ...

  8. func-spring-boot-starter 匿名函数托管

    func-spring-boot-starter 匿名函数托管 GitHub项目路径: https://github.com/yiurhub/func-spring-boot-starter Gite ...

  9. Lambda应用模式

    Lambda应用模式 前言 在使用 Lambda 表达式时,我们常会碰到一些典型的应用场景,而从常用场景中抽取出来的应用方式可以描述为应用模式.这些模式可能不全是新的模式,有的参考自 JavaScri ...

随机推荐

  1. 利用OpenLayers创建wkt字符串

    var polygon = OpenLayers.Geometry.Polygon.createRegularPolygon(new OpenLayers.Geometry.Point(6, 49), ...

  2. Linux查看cpu个数

    [root@lidongbo~]# cat /proc/cpuinfo processor       : 0 vendor_id       : GenuineIntel cpu family    ...

  3. input 模糊搜索

    <html> <head> <title>test</title> <script type="text/javascript" ...

  4. Linux Makefile简单模板

    ########################################### #Makefile for simple programs ########################## ...

  5. Three ways to make your WPF images pop out on MouseOver

    There are a couple of ways in WPF to make an image pop out when moving mouse over it. Of course we w ...

  6. Sublime for mac 开发Golang : 一步步环境配置

    安装Golang 在官网上直接下载安装包就可以了.下载pkg格式的最新安装包 ,直接双击运行,一路按照提示操作就可以完成安装. 或者使用brew进行安装 brew install go 完成安装之后, ...

  7. 【转】【Centos】安装 lnmpa 集成开发环境

    解压完毕之后执行 ./install.sh lnmpa 系统需求: CentOS/RHEL/Fedora/Debian/Ubuntu/Raspbian Linux系统 需要3GB以上硬盘剩余空间 12 ...

  8. 解决maven jmxtools 缺失的问题

    原因:有版权,所以maven仓库基本都下架了jmxtool. 目前可用的,我就找到了wso2这家,配置如下: <project xmlns="http://maven.apache.o ...

  9. python 判断一个对象的变量类型

    isinstance   语法: isinstance(object, classinfo) 如果参数object是classinfo的实例,或者object是classinfo类的子类的一个实例, ...

  10. e777. 获得JList组件的所有项

    // Create a list String[] items = {"A", "B", "C", "D"}; JLis ...