Nullable 解析

摘要: 今天跟个朋友讨论了下Nullable。 在此列入笔记稍作记录。 在.net 3.0之后便引入了 值类型?的写法,例如 int?,float?等,其表示为可为空的值类型。 对于任何一个值类型的可空类型,其实现都是来自于 Nullable<T> 这个泛型的实现,而Nullable事实上是一个Struct。 所以有时有人会有疑问,如果int?只是一个Struct的实现。那为什么以下代码... 阅读全文
posted @ 2010-09-23 01:08 兴说: 阅读(545) 评论(0) 推荐(0) 编辑

Chapter3 - Pattern Match

摘要: 模式匹配 (Pattern Matching) 模式匹配允许你通过一些定义的标识符的值来执行不同的算法步骤,他有点像之前的 if ... then ... else,也可能跟类似 C++ 跟 C# 的 switch,但更加强大。 下面我们来看一个例子: [代码] printfn "(luc 2) = %i" (luc 2) printfn "(luc 6) = %i" (luc 6) ... 阅读全文
posted @ 2010-09-20 08:33 兴说: 阅读(1857) 评论(0) 推荐(1) 编辑

Chapter3 - Types And Type Interface

摘要: F# 是一门强类型的语言,这意味着你不可以使用一个不适合的参数来调用一个函数。 你必须在必要的时候进行适当的类型转换,或必须使用匹配的类型。 一般来说,你不需要特别的区声明一个类型,因为编译器会自动帮你推断类型。 比如自动帮你推出一个函数的参数或者他的返回值会是什么类型。 除非编译器无法推断出这个代码块需要的类型,或是当前的代码块可能会有多种匹配方式, 才会需要你去声明这个类型。 下面的例子... 阅读全文
posted @ 2010-09-19 09:17 兴说: 阅读(239) 评论(0) 推荐(0) 编辑

Chapter3 - Control Flow

摘要: F# 有相较于其他的单纯的函数式语言来说比较其他的控制流。从以下的 if ... then ... else 表达式 中你就能看出来。 在 F#中 if .. then .. else 结构可以是一个表达式,这表示他可以返回一个值。一或两个不一样的值可以从表达式 中返回,这取决于你 Boolean 表达式的值。下面我们看一个例子。[代码] F# 的类型系统要求在 if ... then .... 阅读全文
posted @ 2010-09-19 08:24 兴说: 阅读(226) 评论(0) 推荐(0) 编辑

Chapter3 - Control Flow

摘要: F# 有相较于其他的单纯的函数式语言来说比较其他的控制流。从以下的 if ... then ... else 表达式 中你就能看出来。 在 F#中 if .. then .. else 结构可以是一个表达式,这表示他可以返回一个值。一或两个不一样的值可以从表达式 中返回,这取决于你 Boolean 表达式的值。下面我们看一个例子。[代码] F# 的类型系统要求在 if ... then .... 阅读全文
posted @ 2010-09-19 08:23 兴说: 阅读(116) 评论(0) 推荐(0) 编辑

Chapter3 - List Comprehensions

摘要: 这次我们介绍一些列表初始化跟操作的便捷方式 你可以使用一些特殊的语法来初始化 list,sequences跟arrays(list我们就知道了,而sequences 则对应 .net 的 IEnumerable 类型, arrays后面的章节会介绍) 最简单的初始化一个连续的列表方法是使用 ..,看示例 [代码] 可见,[x..y..z]中,x为初始值,y为步长,z为结束值 即最后的列表... 阅读全文
posted @ 2010-09-18 11:25 兴说: 阅读(679) 评论(0) 推荐(0) 编辑

Chapter3 - 列表 - List

摘要: F#的列表是一种简单的内置集合类型。F#的列表可以是一个空的列表([]),或者是一些值的集合 你可以用 :: 来连接许多的项 [代码] 你也可以在初始化列表的时候使用;来分隔列表里的项 [代码] F#还提供了 @ ,你可以用这个操作符来连接两个列表 [代码] 在同一个列表里的项都必须是同一个类型的,如果你想在里面塞一些不一样的东西进去的华。 编译器将会报出一个错误。当然,你可以强制的使用 ... 阅读全文
posted @ 2010-09-17 13:49 兴说: 阅读(344) 评论(0) 推荐(0) 编辑

Chapter3 - 操作符 - Operators

摘要: 额...事实上这节我不大想写,因为比较简单,事实上所有开发者都能看懂,而就算是其他领域的人也能很容易的理解。 当然,操作符重载啥的还是灰藏值得研究的。 列几个书上的例子吧 我们可以重载的操作符有 !$%&*+-./<=>?@^|~ 给两个个例子:[代码] 阅读全文
posted @ 2010-09-17 12:49 兴说: 阅读(189) 评论(0) 推荐(0) 编辑

Chapter3 - 匿名函数 - Anonymous Functions

摘要: F#提供了另外一个给我们去定义函数的方式,这就是使用关键字 fun 在接下来我们会给出例子。一般来说,在有些没有必要去定义一个局部使用,或者是不需要 名字的函数的时候你会用到这个特性。 比如当你的函数可能是会以参数的形式传递给另外一个函数,又或者该函数的作用小到不足以 费周折去定义它的时候。事实上,比如在使用List的时候我们就经常会用到它。 而事实上匿名函数也被称为lambda表达式(... 阅读全文
posted @ 2010-09-17 11:55 兴说: 阅读(272) 评论(0) 推荐(0) 编辑

Chapter3 - 递归 - Recursion

摘要: 递归表示定义的这个函数能够调用他自身。换句话说,这个函数 能在定义自己的时候再调用自己。 在函数式编程中经常会使用递归来代替循环。 大多数人认为,递归能够是你的代码跟容易让别人理解。 在F#中使用递归,我们只需要在定义的时候,在函数名前加上关键字 rec 即可,下面的例子就递归的用法(译者:虽然用递归这样来处理 斐波拉契数并不一定是个合适的选择) [代码] 结果: (fib 2) ... 阅读全文
posted @ 2010-09-17 08:35 兴说: 阅读(229) 评论(0) 推荐(0) 编辑