摘要: 泛型数字代码是能够被用来处理多种不同数字类型包括像int 型, decimal型 和float型或者甚至是我们自己的数字类型的一些计算(比如此系列的前篇文章中的时钟运算)。泛型数字代码区别于普通的F#泛型代码像'a 链表类型 或者List.map函数, 因为数字代码使用数字操作符, 比如为每个数字类型而区别定义的+或者 >=。当编写有一些参数类型 'T的简单泛型代码的时候, 对于参数的类型我们什么也不知道并且也没有办法将其确定为某一数字类型,来提供所有我们需要在我们的代码里面使用的操作符。这就是.NET运行时的局限性,F#提供2种方式来克服这个问题。:: 静态成员约束 能 阅读全文
posted @ 2012-06-01 14:18 tryfsharp 阅读(458) 评论(0) 推荐(0) 编辑
摘要: F#提供了一个叫"活动模式"的有趣功能。它把输入的数据转换成其他不同的东西。一个有趣的使用实例就是代替枚举。但我编程枚举的时候,我总不高兴去链接枚举项到它的定义。例如,下面的枚举定义了 数字枚举,enum Numbers{ Odd, Even,}但是它没有说明什么是Odd,什么是Even。我试着使用特性或简单的注释,但是我真正想得到的是在F#中见到枚举项就获取定义。当我看见活动模式的时候,我的眼睛一下亮起来了。你真的可以使用非分部模式来解决这个问题,但是你不能放多余8项,所以我选择使用分部模式,为了我的系统在将来可以容易的扩展。let ( | Even | _ | ) x 阅读全文
posted @ 2012-06-01 14:13 tryfsharp 阅读(267) 评论(0) 推荐(0) 编辑
摘要: 最近在西雅图F#小组期间,我被问到怎样用F#来做windows phone calculator。若是你知道F#,它并不难。计算器的骨干就是一个字符串解析器。它能被从头开始写或者用已有的东西来写。既然我想投入生产而不是准备一个面试,那么我选择使用F# powerpack提供的已有的yacc解析器。如果我把前后端的yacc分析器结合起来,大部分工作就完成了,余下的就是去补下你的yacc\lex知识。我选择使用C#XNA作为前端,因为待会我想画函数图像,担心Silverlight不能满足我的需求。你能使用F# XNA作为前端,但这不是主要的话题。整个解决方案有4个项目。两个XNA标准项目和两个F# 阅读全文
posted @ 2012-06-01 14:12 tryfsharp 阅读(276) 评论(0) 推荐(0) 编辑
摘要: 当我尝试破解.CAB文件的时候, 我发现F#里面的COM交互不同于C#。在从"COM"选项卡增加了"Microsoft Shell Controls And Automation"之后,C#里面的实例代码像下面的代码。bool ExpandCabFile(string CabFile,string DestDir) { if (!Directory.Exists(DestDir))return false; Shell sh = new Shell(); Folder fldr =sh.NameSpace(DestDir); foreach (Folde 阅读全文
posted @ 2012-06-01 14:11 tryfsharp 阅读(377) 评论(0) 推荐(0) 编辑
摘要: 我有一个坏习惯,对我来说,忘记它不是很容易。昨天晚上,这个小怪物又来困扰了我。可能我不能解决之前的问题,相反我被引诱到一片新领土。昨天晚上,这个怪物提醒了我单元测试 type provider, 使我想到怎样在不同的type provider方法间共享信息。目前的type provider的方法调用是独立的, 几乎没有如何维护一个内部状态的例子。正则表达式type provider是一个例子。一旦你有了匹配的组,那个组就是一个自给的结构而不需要和另外匹配的组交互。我感兴趣的是怎样使信息在type provider的方法调用中流动/共享。例如,我想Method2去更新在Method1中发送的信息 阅读全文
posted @ 2012-06-01 14:10 tryfsharp 阅读(261) 评论(1) 推荐(0) 编辑