VBF BETA 1.5 发布了
http://sourceforge.net/project/showfiles.php?group_id=148613
首先给不熟悉VBF的人简单介绍一下VBF:VBF是一个.NET下的函数式编程类库,提供了创建函数式算法逻辑的基本框架,还提供了一个使用组合子和高阶函数来创建新函数的体系。使用VBF可以实现对象查询、词法解析以及延迟执行逻辑的许多程序。这个版本提供的新功能主要包括:
1、Nullable的支持和IsNull判定
这次提供了对.NET Framework 2.0中Nullable Type的支持,即支持返回Nullalbe<T>类型的函数子(Functor)使用定义在T上的四则运算或比较运算符。对C#而言,这是一个非常方便的特性。比如我们有个一System.Collections.Generic.List<int?>类型的列表list1,下面的代码演示了如何从中查询到所有小于0或者为空的项:
//定义一个Identity对象用于查询
Identity<int?> IdNInt = new Identity<int?>();
List<int?> result = list1.FindAll(IdNInt.IsNull() || IdNInt < 0);
如你所见,现在可以使用捷径运算符||和&&了,这也是本版本一个新增功能。另一个新增功能:IsNull()返回一个函数用于判断当前项是否为空。
2、元组(Tuple)和多元函数支持
现在VBF通过对Tuple的支持,提供了处理二元函数及三元函数的能力。Tuple是一种只读结构体,其每个字段的类型均由类型参数指定。因此使用Tuple,你可以快速创建出满足你要求的小型结构。
'演示生成一个Tuple
Dim t1 As Tuple(Of Integer, String) = Values(12, "Hello World")
Dim t2 As Tuple(Of Long, Single, Date) = _
Values(100L, -58.8, Now())
Values函数自动生成一个相应类型的Tuple,当前Tuple最多支持5个类型参数。Tuple用于模拟多元函数的参数表,还可以作为查询的临时返回量。
3、属性访问语法
这是本版本极其重要的一个功能,有了他,就可以在Id型查询中访问被查询对象的属性。我们先看一个例子。假设Employee类型有两个属性——整数型的Age和字符串型的Name。如果我们有一个System.Collections.Generic.List<Employee>类型的列表emplist,现在要找到所有Age大于25的Employee对象,该如何写呢?VBF提供了独特的!语法(仅支持VB)和Satisfies满足条件方法:
'Employee是一个有Age和Name属性的类型
'emplist是一个装有Employee实例的List(Of Employee)
'定义Identity对象用于查询
Dim IdEmp As New Identity(Of Employee)
result = emplist.FindAll(IdEmp!Age.Satisfies(IdInt > 25))
注意!Age语法,它提供了对Age的访问,但无法得知Age的类型。因此需要在Satisfies函数后面用强类型的IdInt指明要查询的Age是Integer类型。这条查询语句可以读作“寻找Employee,它的Age属性满足整数大于25”。这已经是我找到的最具可读性的写法。除了Satisfies满足条件方法,还支持直接取得属性值的功能。比如我们要的到另一个List(Of String),是刚才那个Employee集合中所有项目Name属性组成的集合,可以这样写:
'接上段代码
Dim names As List(Of String) = _
emplist.ConvertAll(Of String)(IdEmp!Name.AsType(Of String))
AsType方法表明了你要访问的属性的真实类型,这里不支持任何协变。比如上述语法如果你是用Of Object就会运行错误。C#不支持!运算符,我在C#中采用了indexer的语法,即使用方括号来访问想要的属性:
Identity<Employee> IdEmp = new Identity<Employee>();
result = emplist.FindAll(IdEmp["Age"].Satisfies(Identities.IdInt > 25));
4、延迟执行
现在VBF的每一个函数子对象(Functor)都支持一个DelayInoke的函数,它能返回一个IDelayInvoke(Of TReturn)的接口。使用DelayInvoke可以延迟函数的真实求值过程,直到真正使用函数返回值的时候才开始计算。延迟执行可以用来实现Command模式以及Undo/Redo功能。
VBF 1.5还提供了许多其它的新功能,比如用于String型函数的IndexOf方法支持、一元正负运算符支持、类型转换函数支持等等。有兴趣的可以直接下载源代码观看。很抱歉的是这次时间仍然较紧张,我还是没有提供文档,如果发现很难看懂我建议从Functor(Of TArg, TReturn)这个类的虚函数开始看起。希望大家多多提出建议,以便在VBF中提供更多新酷功能。
VBF BETA 1.5 发布了相关推荐
- iPhone13系列售价曝光:4535元起售;微信暂停个人帐号新用户注册;Android 12 Beta 3.1发布|极客头条...
「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...
- 【下载源码】在线生成网页缩略图.超越Snap.com:WebSnap Beta 1.1 发布。感谢博客园的“萧寒”重写的底层。开源。
[下载源码]在线生成网页缩略图.超越Snap.com:WebSnap Beta 1.1 发布.感谢博客园的"萧寒"重写的底层.开源. DEMO网址:http://www.365rs ...
- 极客日报:iPhone13系列售价曝光:4535元起售;微信暂停个人帐号新用户注册;Android 12 Beta 3.1发布
一分钟速览新闻点! 腾讯客服回应"微信暂停个人帐号新用户注册" 华为回应智能驾驶总裁苏箐被免职 消息称 OPPO.vivo 即将推出自研 ISP 芯片 腾讯起诉腾迅获赔 30 万 ...
- android11铃声pixel,Android 11 Beta版1发布,谷歌Pixel系列尝鲜,到底是亲儿子
原标题:Android 11 Beta版1发布,谷歌Pixel系列尝鲜,到底是亲儿子 当鲁sir抱着自己的安卓9手机开开心心的摸鱼时,突然看到一个扎眼的新闻,Android 11 beat版已经发布, ...
- 代码发芽网(Beta版)发布,欢迎测试、试用
代码发芽网(Beta版)发布,欢迎测试.试用 作者:半瓶墨水 链接:http://www.2maomao.com/blog/code-fayaa-beta/ 发芽网主页:http://www.faya ...
- Xcode 15 beta 3 (15A5195k) 发布下载 - Apple 平台 IDE
Xcode 15 beta 3 (15A5195k) 发布下载 - Apple 平台 IDE (visonOS 1 beta 已发布) 7 月 5 日(北京时间今日凌晨)已发布. IDE for iO ...
- flutter和webapp_Flutter Web Beta版本终于发布了
在昨天的Flutter Interact大会中,谷歌Flutter团队给我们带来了最新的Flutter 1.12版本,在此次版本更新中,其中一个吸引人的功能就是"Flutter Web Be ...
- 【Beta阶段】发布说明
在经历Beta阶段紧张的开发后,本次Beta阶段取得的成果虽然不如Alpha阶段多,但是也算是做到了稳中求进,一共预想了三个feature,最终做出了预想的两个feature. 新功能说明 新的主页: ...
- Chrome OS 0.4.220 Beta下载已发布
备受关注的谷歌操作系统终于要发布了,广大谷歌爱好者欢欣鼓舞,迎接这一喜讯!目前放出的版本是0.4.220beta测试版本,详细下载地址如下: http://sites.google.com/site/ ...
最新文章
- matlab 和python读取csv文件速度_matlab读取csv文件数据并绘图
- 架WSUS服务器 内网自动打补丁
- 十八、深入Java 访问修饰符和非访问修饰符
- VuePress 添加百度统计代码
- 相同字符串的string对象不等
- java tcp聊天程序_java实现基于Tcp的socket聊天程序
- Linux网络管理常用命令:net-tools VS iproute2
- 5.剑指Offer --- 优化时间和空间效率
- 定时重启_SpringBoot基于数据库的定时任务实现方法
- .NetCore对接各大财务软件凭证API——金蝶系列(2)
- 语音转换成文本 技术实现_职业转换者指南,帮助您实现梦想的技术工作
- 机器学习笔记——神经网络与深度学习
- vue2.0 使用xlsx读取excel文件数据 操作流程 以及文件中特殊日期数据的处理
- 数学与计算机科学虎扑,北大数学系在国内是最顶级存在吗?
- 打印机服务器ip修改,怎样改打印机服务器的ip地址
- 2015出现神曲空挡期,玖月奇迹接棒筷子兄弟?
- 液晶屏幕,OLED屏幕,反应时间计算,RT,ResponseTime,响应时间
- 【picoCTF2022】Misc部分
- NANK南卡lite Pro无线蓝牙耳机上手体验
- CSS3 SVG实现可爱的动物哈士奇和狐狸动画