F#中的Printfn输出

输出I/O执行结果到控制台最简单的方法就是使用printf函数家族了。printf这类函数一共包括三个主要方法:printf,printfn,和sprintf。

使用printf输出到屏幕是直接输出。

例如:

View Code
1 printf "Hello";;

将输出:Helloval it : unit ()  [以上是在F#Interactive窗口输出,以后如果不加特别说明都将在此窗口输出]

使用printfn输出到屏幕时将先添加一空行,然后再输出

例如:

View Code
1 printfn "World";;

将输出:World

    val it : unit ()

那么如果两个一起用:printf "hello"

          printfn "world";;

将会输出:hello world

需要说明一点的是,虽然.NET System.Console类常用来输出文本,但是printf函数显然更合适,因为他的参数是强类型,这有利于类型推断。

输出文本到控制台显示并不让人兴奋,但printf添加了很多强大的具体格式化和内嵌检查的重载。看下面的例子。

>let mountain = "K2"
let height = 8611
let units = 'm';;
//回车后输出:
val mountain : string = "K2"
val height : int =8611
val units : char = 'm'

>printfn
"%s is %d %c high" mountain height muits;;
//输出:
K2 is 8611m high
val it : unit = ()

当使用F#的类型推断系统时,如果数据和所给的格式化说明符不匹配,编译器将报错。

看下面的例子:

1 >printfn "An integer = %d" 1.23;;
2 //执行这名代码时会报错。
3 'float'和类型byte,int16,int32,int64,sbyte,uint16,uint32,uint64,nativeint,unativeint
4 ,arising等等不匹配

另外,由于F#编译器知道如何给格式化说明符一系列所期望的类型,类型推断系统能够约束值的类型。

看例子:

1 >let inferParams x y z=
2 printfn "x = %f, y = %s, z = %b" x y z;;
3 //类型为:
4 val inferParams : float -> string -> bool -> unit
5
6 //因为格式化时为x指定了%f,所以推断的float,后两个同理

以上介绍了printf和printfn的用法。下面是sprintf.

(sprintf比较简单,前面带了个s,就说明类型应该是string类型,当然这是我的理解。)

1 >let location = "World";;
2 //输出:
3 val location : string
4 >sprintf "Hello,%s" location;;
5 //输出:
6 val it : string = "Hello World"

以前就是F#中的基本输出类型。

敬请期待下一篇的F#程序剖析

    

posted @ 2011-08-31 10:25  carsick_cars  阅读(905)  评论(0编辑  收藏  举报