Lambda模式
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
Lambda模式的更多相关文章
- 大数据小视角4:小议Lambda 与 Kappa 架构,不可变数据的计算探索
这个系列文章之前因为私事荒废了很久,继续更新--之前与老大谈论架构时,老大和我聊了聊分布式数据处理之中的Lambda结构,之前在<Designing Data-Intensive Applica ...
- [搬运]在C#使用.NET设计模式的新观点
原文地址:http://www.dotnetcurry.com/dotnet/1092/dotnet-design-patterns 软件开发有许多设计模式.其中一些模式非常受欢迎.说几乎所有的模式都 ...
- .NET面试题系列(一)基本概念
什么是CLR CLR常用简写词语,CLR是公共语言运行库(Common Language Runtime)和Java虚拟机一样也是一个运行时环境,它负责资源管理(内存分配和垃圾收集等),并保证应用和底 ...
- 通过Flink实现个推海量消息数据的实时统计
背景 消息报表主要用于统计消息任务的下发情况.比如,单条推送消息下发APP用户总量有多少,成功推送到手机的数量有多少,又有多少APP用户点击了弹窗通知并打开APP等.通过消息报表,我们可以很直观地看到 ...
- Webflux请求处理流程
spring mvc处理流程 在了解SpringMvc的请求流程源码之后,理解WebFlux就容易的多,毕竟WebFlux处理流程是模仿Servlet另起炉灶的. 下面是spring mvc的请求处理 ...
- func-spring-boot-starter 快速上手
func-spring-boot-starter test 项目地址 func-spring-boot-starter项目地址: https://gitee.com/yiur/func-spring- ...
- 匿名函数托管 func-spring-boot-starter
匿名函数托管 func-spring-boot-starter 项目地址 func-spring-boot-starter开源项目地址: https://gitee.com/yiur/func-spr ...
- func-spring-boot-starter 匿名函数托管
func-spring-boot-starter 匿名函数托管 GitHub项目路径: https://github.com/yiurhub/func-spring-boot-starter Gite ...
- Lambda应用模式
Lambda应用模式 前言 在使用 Lambda 表达式时,我们常会碰到一些典型的应用场景,而从常用场景中抽取出来的应用方式可以描述为应用模式.这些模式可能不全是新的模式,有的参考自 JavaScri ...
随机推荐
- asp.net cookie的操作
//写入 protected void Button2_Click(object sender, EventArgs e) { HttpCookie cookie=new Ht ...
- javascript 获取当前部署项目路径
javascript 获取当前部署项目路径 ========================================= javascript获取当前部署项目路径: 主要用到Location 对 ...
- css关于定位那些事情
css绝对定位.相对定位和文档流的那些事 前言 接触html.和css时间也不短了,但每次用div+css布局的时候心里还是有点儿虚,有时候干脆就直接用table算了,很多时候用div会出现些不可预料 ...
- Android学习之ListView使用基础
1.ListView的简单用法 1.1 布局 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/andro ...
- Ogre RTSS组件解析
我们为什么要用RTSS. Ogre如计算物体位置,纹理,光照都有固定API如(glMatrixFrustumEXT, glLoadmatrix, glTexture, glLight ),使用这些AP ...
- (笔记)Mysql命令mysqldump:备份数据库
mysqldump命令用来备份数据库. mysqldump命令在DOS的[url=file://\\mysql\\bin]\\mysql\\bin[/url]目录下执行. 1) 导出整个数据库(导出文 ...
- GDB调试——常用的命令
首先说明一点,如果我们要使用GDB来调试我们的C/C++程序时,在使用GCC编译程序时,应该带上 –g 参数, 它负责生成 与GDB相关的调试信息: 1.如何对一个文件启动GDB调试? 方法一: 命令 ...
- Java如何处理空堆栈异常?
在Java编程中,如何处理空堆栈异常? 本例展示了如何使用Date类的System.currentTimeMillis()方法和Stack类的s.empty(),s.pop()方法来处理空堆栈异常. ...
- e610. Setting Focus Traversal Keys in a Component
When the focus is on a component, any focus traversal keys set for that component override the defau ...
- Native Code
Native Code — 本机代码,即已被编译为运行于特定处理器机器码的代码. 本地代码(native code)是计算机编程(代码),编译用来运行一个特殊的处理器(如英特尔x86级的 ...