Chapter3 - Control Flow


F# 有相较于其他的单纯的函数式语言来说比较其他的控制流。从以下的 if ... then ... else 表达式

中你就能看出来。

在 F#中 if .. then .. else 结构可以是一个表达式,这表示他可以返回一个值。一或两个不一样的值可以从表达式

中返回,这取决于你 Boolean 表达式的值。下面我们看一个例子。


 

#light

let result =
    
if System.DateTime.Now.Second % 2 = 0 then
  
     "heads"
    else
       
"tails"

print_string result


 

F# 的类型系统要求在 if ... then ... else 表达式中必须返回相同的类型,不然编译器

将会报错。而如果你确实希望能够返回不同类型的值,你可以在 if ... then ... else 表达式中

返回 obj类型(System.Object)。以下的示例就展示了如何实现。

 


#light

let result =
    
if System.DateTime.Now.Second % 2 = 0 then
        box 
"heads"
    else
        box 
false

print_any result


 

习惯于命令式编程的开发人员可能会奇怪 if ... then ... else 表达式 想返回值的时候必须有 else ,

而如果我们把 else 从表达式中移除,当当前的秒数不为偶数时,result 将什么都不是, 这对于一个

函数式语言来说是应该避免的。当然也有另一种方式来使用 if .. then 而不使用 else ,但那已经是跟

命令式编程的风格非常相似了,所以我们把它放到第四章来介绍。

posted on 2010-09-19 08:23  兴说:  阅读(116)  评论(0编辑  收藏  举报