昨天忙了一个晚上,终于发布了新的BETA 1.5。叫BETA 1.5而不是BETA2的原因是我觉得这次发布比较仓卒,品质恐怕还到不了叫BETA2的程度。但是这次更新带来的新特性还是比较多的。下载页面:
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或者为空的项:

//C#
//定义一个Identity对象用于查询
Identity<int?> IdNInt = new Identity<int?>();

List<int?> result = list1.FindAll(IdNInt.IsNull() || IdNInt < 0);

如你所见,现在可以使用捷径运算符||和&&了,这也是本版本一个新增功能。另一个新增功能:IsNull()返回一个函数用于判断当前项是否为空。

2、元组(Tuple)和多元函数支持

现在VBF通过对Tuple的支持,提供了处理二元函数及三元函数的能力。Tuple是一种只读结构体,其每个字段的类型均由类型参数指定。因此使用Tuple,你可以快速创建出满足你要求的小型结构。

'VB
'演示生成一个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满足条件方法:

'VB
'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属性组成的集合,可以这样写:

'VB
'接上段代码

Dim names As List(Of String) = _
    emplist.ConvertAll(Of String)(IdEmp!Name.AsType(Of String))

AsType方法表明了你要访问的属性的真实类型,这里不支持任何协变。比如上述语法如果你是用Of Object就会运行错误。C#不支持!运算符,我在C#中采用了indexer的语法,即使用方括号来访问想要的属性:

//C#
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 发布了相关推荐

  1. iPhone13系列售价曝光:4535元起售;微信暂停个人帐号新用户注册;Android 12 Beta 3.1发布|极客头条...

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...

  2. 【下载源码】在线生成网页缩略图.超越Snap.com:WebSnap Beta 1.1 发布。感谢博客园的“萧寒”重写的底层。开源。

    [下载源码]在线生成网页缩略图.超越Snap.com:WebSnap Beta 1.1 发布.感谢博客园的"萧寒"重写的底层.开源. DEMO网址:http://www.365rs ...

  3. 极客日报:iPhone13系列售价曝光:4535元起售;微信暂停个人帐号新用户注册;Android 12 Beta 3.1发布

    一分钟速览新闻点! 腾讯客服回应"微信暂停个人帐号新用户注册" 华为回应智能驾驶总裁苏箐被免职 消息称 OPPO.vivo 即将推出自研 ISP 芯片 腾讯起诉腾迅获赔 30 万 ...

  4. android11铃声pixel,Android 11 Beta版1发布,谷歌Pixel系列尝鲜,到底是亲儿子

    原标题:Android 11 Beta版1发布,谷歌Pixel系列尝鲜,到底是亲儿子 当鲁sir抱着自己的安卓9手机开开心心的摸鱼时,突然看到一个扎眼的新闻,Android 11 beat版已经发布, ...

  5. 代码发芽网(Beta版)发布,欢迎测试、试用

    代码发芽网(Beta版)发布,欢迎测试.试用 作者:半瓶墨水 链接:http://www.2maomao.com/blog/code-fayaa-beta/ 发芽网主页:http://www.faya ...

  6. Xcode 15 beta 3 (15A5195k) 发布下载 - Apple 平台 IDE

    Xcode 15 beta 3 (15A5195k) 发布下载 - Apple 平台 IDE (visonOS 1 beta 已发布) 7 月 5 日(北京时间今日凌晨)已发布. IDE for iO ...

  7. flutter和webapp_Flutter Web Beta版本终于发布了

    在昨天的Flutter Interact大会中,谷歌Flutter团队给我们带来了最新的Flutter 1.12版本,在此次版本更新中,其中一个吸引人的功能就是"Flutter Web Be ...

  8. 【Beta阶段】发布说明

    在经历Beta阶段紧张的开发后,本次Beta阶段取得的成果虽然不如Alpha阶段多,但是也算是做到了稳中求进,一共预想了三个feature,最终做出了预想的两个feature. 新功能说明 新的主页: ...

  9. Chrome OS 0.4.220 Beta下载已发布

    备受关注的谷歌操作系统终于要发布了,广大谷歌爱好者欢欣鼓舞,迎接这一喜讯!目前放出的版本是0.4.220beta测试版本,详细下载地址如下: http://sites.google.com/site/ ...

最新文章

  1. matlab 和python读取csv文件速度_matlab读取csv文件数据并绘图
  2. 架WSUS服务器 内网自动打补丁
  3. 十八、深入Java 访问修饰符和非访问修饰符
  4. VuePress 添加百度统计代码
  5. 相同字符串的string对象不等
  6. java tcp聊天程序_java实现基于Tcp的socket聊天程序
  7. Linux网络管理常用命令:net-tools VS iproute2
  8. 5.剑指Offer --- 优化时间和空间效率
  9. 定时重启_SpringBoot基于数据库的定时任务实现方法
  10. .NetCore对接各大财务软件凭证API——金蝶系列(2)
  11. 语音转换成文本 技术实现_职业转换者指南,帮助您实现梦想的技术工作
  12. 机器学习笔记——神经网络与深度学习
  13. vue2.0 使用xlsx读取excel文件数据 操作流程 以及文件中特殊日期数据的处理
  14. 数学与计算机科学虎扑,北大数学系在国内是最顶级存在吗?
  15. 打印机服务器ip修改,怎样改打印机服务器的ip地址
  16. 2015出现神曲空挡期,玖月奇迹接棒筷子兄弟?
  17. 液晶屏幕,OLED屏幕,反应时间计算,RT,ResponseTime,响应时间
  18. 【picoCTF2022】Misc部分
  19. NANK南卡lite Pro无线蓝牙耳机上手体验
  20. CSS3 SVG实现可爱的动物哈士奇和狐狸动画

热门文章

  1. Flume-监控之Ganglia
  2. UIAlertController 警告框
  3. 嵌入式Linux要学哪些东西?你真的造吗
  4. CeontOS7安装ansible
  5. nhibernate配置教程
  6. 131. 分割回文串
  7. 【论文写作】网上选课系统中模块设计如何写
  8. 数据结构与算法之-----栈的应用(一)
  9. 用c语言枚举计算坐标,来个c++枚举有效范围计算器
  10. 华为手机全面鸿蒙,彻底与安卓说拜拜,华为手机全面鸿蒙时代即将到来