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 ,但那已经是跟

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

你可能感兴趣的:(apt)