第七章 F# 库(四)

打印(Microsoft.FSharp.Text.Printf)模块

打印(Printf)模块提供了以类型案例的方式格式化字符串的函数,打印模块中函数的第一个参数是值的占位符,它返回的函数需要为占位符提供值;占位符用百分号加一个表示类型的字母组成,表 7-2 是完整的清单。

表 7-2 打印模块的占位符和标记


标记


描述


%b


布尔型,格式化为 “true” 或 “false”


%s


字符串,格式化为它的非转义内容


%d, %i


任何基本整型(即,sbyte, byte, int16, uint16, int32, uint32, int64, uint64, nativeint, or unativeint),格式化为十进制整数,符号依基本整型


%u


任何基本整型,格式化为无符号的十进制整数


%x, %X, %o


任何基本整型,格式化为无符号的十六进制数(a-f),十六进制数(A-F),八进制数


%e, %E


任何基本浮点数(即,float 或 float32),使用 C 风格的浮点格式规范进行格式化,有符号值的组成:[-]d.dddde[sign]ddd,其中:d 是一个十进制数字,dddd 是一个或多个十进制数字,ddd是三个十进制数字,sign 是 + 或 -


%f


任何基本浮点数,使用 C 风格的浮点格式规范进行格式化,有符号值的组成:[-]dddd.dddd,其中:dddd 是一个或多个十进制数字;小数点前面数字的多少取决于值的大小,后面数字的多少取决于要求的精度


%g, %G


任何基本浮点数,使用 C 风格的浮点格式规范进行格式化,有符号值以 f 或 e 格式打印,对于给定的值和精度,看哪一个更紧凑


%M


System.Decimal 值


%O


任意值,打印装箱(boxing)的对象,使用它的 ToString 方法


%A


任意值,打印出的值很智能,用户可以看到属性和字段的值


%a


一个是函数,它也有两个参数,其一是上下文参数,与给定的格式化函数(比如 System.IO.TextWriter)相对应的类型,其二是打印的值,可以输出或返回适当的文本;另一个是实际要打印的值


%t


通用格式分类符,要求一个是函数的参数:它也有两个参数,其一是上下文参数,与给定的格式化函数(比如 System.IO.TextWriter)相对应的类型,其二是打印的值,可以输出或返回适当的文本


0


这个标记表示用加 0 代替空格组成要求的宽度


-


这个标记表示在指定的宽度内左对齐


+


这个标记表示,如果为正数,加上 + 号(负数对应 - 号)


‘ ‘


如果为负数额外加上空格(负数对应 - 号)

下面的示例演示如何使用 printf 函数,创建一个函数,需要一个字符串,然后,把字符串传递给这个函数。

Printf.printf "Hello %s""Robert"

代码的运行结果如下:

Hello Robert

这个示例的意义可能并不十分明显,下面的示例有助于解释原因。如果传递给printf 函数的类型错误,就不能编译通过:

Printf.printf "Hello %s" 1

前面的代码不能编译通过,出现下面的错误:

Prog.fs(4,25): error: FS0001: Thisexpression has type

int

but is here used with type

string

这对类型推断(type inference)也有影响。如果创建的函数使用 printf,那么,传递给 printf 的任意参数都会从这里推断出类型。例如,下面代码中函数myPrintInt 的类型为int -> unit,是因为其中包含了 printf 函数:

let myPrintInt x =

Printf.printf"An integer: %i" x

打印模块中函数的基本占位符,布尔型是 %b,字符串是 %s,整型为 %d 或 %i,无符号整型为 %u,而%x、%X 或 %o 则格式化为十六进制和八进制数[ 原文有误];在数值型显示中指定小数倍数也是可能的,下面的示例有演示:

let pi = System.Math.PI

Printf.printfn "%f" pi

Printf.printfn "%1.1f" pi

Printf.printfn "%2.2f" pi

Printf.printfn "%2.8f" pi

代码的运行结果如下:

3.141593

3.1

3.14

3.14159265

打印模块中还有大量其他函数,格式化字符串的方法同 printf 本身,但是,结果可以写到不同的地方。下面的示例演示了一些不同的版本:

// write to a string

let s = Printf.sprintf "Hello%s\r\n" "string"

printfn "%s" s

// prints the string to a .NET TextWriter

Printf.fprintf System.Console.Out"Hello %s\r\n" "TextWriter"

// create a string that will be placed

// in an exception message

Printf.failwithf "Hello %s""exception"

代码的运行结果如下:

Hello string

Hello channel [ 有误,好像没有这一句 ]

Hello TextWriter

Microsoft.FSharp.FailureException: Helloexception

[email protected](String s)

[email protected](A inp))

at<StartupCode>.FSI_0003._main()

stopped due to error

第七章 F# 库(四),码迷,mamicode.com

时间: 2024-10-22 22:46:34

第七章 F# 库(四)的相关文章

第七章 F# 库(三)

序列(Microsoft.FSharp.Collections.Seq)模块 Microsoft.FSharp.Collections.Seq 模块包含所有处理集合的模块,只要它支持 IEnumerable 接口, .NET 框架的 BCL 中的大多数集合都是的.这个模块之所以称为序列(Seq),是因为序列是IEnumerable 接口的别名,是对其简称,为了读.写更方便.给定类型定义时使用这个别名. 注意 FSLib 包含几个模块,用于处理不同类型的集合,包括Array(数组).Array2(

第七章 F# 库(五)

事件(Microsoft.FSharp.Control.Event)模块 可以把 F# 中的事件看做是函数的集合,能够通过函数调用来触发.其思想是,函数本身注册成事件,即函数的集合,等待事件发生的通知:然后,触发函数发出事件已经发生的通知,引发所有添加到事件中的函数被执行. 我们将讨论事件模块中的下列功能: 创建和处理事件:使用 create 和 add 函数来创建和处理事件的基础: 筛选(filter)函数:筛选进入事件中数据的函数: 分区(partition)函数:把进入事件中数据拆分成两部

软件构造 第七章第四节 调试

第七章第四节 调试 [bug的常见类型] 数学bug:例如 零除法,算术溢出 逻辑bug:例如 无线循环和无限递归 源头bug:例如 使用了为被定义的变量.资源泄漏,其中有限的系统资源如内存或文件句柄通过重复分配耗尽而不释放.缓冲区溢出,其中程序试图将数据存储在分配存储的末尾. 团队工程bug:例如 评论过时或者评论错误.文件与实际产品的区别 ## 调试的基本过程 Debug是测试的后续步骤:测试发现问题,debug消除问题:当防御式编程和测试都无法挡住bug时,我们就必须进行debug了: D

第四次作业:读软件工程课本五点五、六、七章感想与疑问

第五点五章 这一部分,本来在上一次就已经有过一次浏览,不过也真的只是浏览而已,哈哈,因为介绍了很多模型,看完后,又忘了,现在说要记住这些东西,对于我来时真的不是件容易的事,也可能觉得现在还没有用到这些东西吧,我曾几何时也在课堂上听老师杜给我们说过一些关于软件过程模型的东西,当时隐约记得介绍了八种模型,而重点要掌握的是瀑布模型,快速原型模型,Rational统一过程rup,微软模型.其实我是想知道我们在以后做一个软件时,是不是用期中的一个模型就可以了啊?还是说可以多个模型一起用?但是多个模型一起用

《深入理解计算机系统》第七章学习笔记(初稿)

第七章 链接 链接是将各种代码和数据部分收集起来并组合成为一个单一文件的过程,这个文件可被加载(或拷贝)到存储器并执行.链接可以执行于编译时,也就是在源代码被翻译成机器代码时:也可以执行于加载时,也就是在程序被加载器加载到存储器并执行时:甚至执行于运行时,由应用程序来执行.在早期的计算机系统中,链接是手动执行的.在现代系统中,链接是由叫链接器的自动执行的. 理解链接器将帮助构造大型程序 理解链接器将帮助避免一些危险的编程错误 理解链接器将帮助语言的作用域规则是如何实现的 理解链接器将帮助其他重要

【转】第七章、Linux 文件与目录管理

原文网址:http://vbird.dic.ksu.edu.tw/linux_basic/0220filemanager.php 第七章.Linux 文件与目录管理 最近升级日期:2009/08/26 在第六章我们认识了Linux系统下的文件权限概念以及目录的配置说明. 在这个章节当中,我们就直接来进一步的操作与管理文件与目录吧!包括在不同的目录间变换. 创建与删除目录.创建与删除文件,还有寻找文件.查阅文件内容等等, 都会在这个章节作个简单的介绍啊! 1. 目录与路径 1.1 相对路径与绝对路

鸟哥的Linux私房菜_基础版_学习笔记3:第七章 Linux文件与目录管理

第七章 Linux文件与目录管理 7.1目录与路径: 7.1.1相对路径与绝对路径: 绝对路径:路径的写法『一定由根目录 / 写起』,例如: /usr/share/doc 这个目录. 相对路径:路径的写法『不是由 / 写起』,例如由 /usr/share/doc 要到 /usr/share/man 底下时,可以写成:『cd ../man』这就是相对路径的写法啦!相对路径意指『相对於目前工作目录的路径!』 7.1.2目录的相关操作: . 代表此层目录 .. 代表上一层目录 - 代表前一个工作目录

Android开发艺术探索——第七章:Android动画深入分析

Android开发艺术探索--第七章:Android动画深入分析 Android的动画可以分成三种,view动画,帧动画,还有属性动画,其实帧动画也是属于view动画的一种,,只不过他和传统的平移之类的动画不太一样的是表现形式上有点不一样,view动画是通过对场景的不断图像交换而产生的动画效果,而帧动画就是播放一大段图片,很显然,图片多了会OOM,属性动画通过动态的改变对象的属性达到动画效果,也是api11的新特性,在低版本无法使用属性动画,但是我们依旧有一些兼容库,OK,我们还是继续来看下详细

课本学习笔记5:第七章 20135115臧文君

第七章 链接 注:作者:臧文君,原创作品转载请注明出处. 一.概述 1.链接(linking):是将各种代码和数据部分收集起来并组合成为一个单一文件的过程,这个文件可被加载或被拷贝到存储器并执行. 2.链接可以执行于编译时.加载时和运行时. 3.链接器(linker):分离编译. 链接通常是由链接器执行. 二.编译器驱动程序 1.大多数编译系统提供编译驱动程序(compiler driver),它代表用户在需要时调用语言预处理器.编译器.汇编器和链接器. 例:ASCII码源文件-->可执行目标文