第七章 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 格式列印,對於給定的值和精度,看哪乙個更緊湊
%msystem.decimal 值
%o任意值,列印裝箱(boxing)的物件,使用它的 tostring 方法
%a任意值,列印出的值很智慧型,使用者可以看到屬性和字段的值
%a乙個是函式,它也有兩個引數,其一是上下文引數,與給定的格式化函式(比如 system.io.textwriter)相對應的型別,其二是列印的值,可以輸出或返回適當的文字;另乙個是實際要列印的值
%t通用格式分類符,要求乙個是函式的引數:它也有兩個引數,其一是上下文引數,與給定的格式化函式(比如 system.io.textwriter)相對應的型別,其二是列印的值,可以輸出或返回適當的文字
這個標記表示用加 0 代替空格組成要求的寬度
這個標記表示在指定的寬度內左對齊
這個標記表示,如果為正數,加上 + 號(負數對應 - 號)
如果為負數額外加上空格(負數對應 - 號)
下面的示例演示如何使用 printf 函式,建立乙個函式,需要乙個字串,然後,把字串傳遞給這個函式。
printf.printf "hello %s""robert"
**的執行結果如下:
hello robert
這個示例的意義可能並不十分明顯,下面的示例有助於解釋原因。如果傳遞給printf 函式的型別錯誤,就不能編譯通過:
printf.printf "hello %s" 1
前面的**不能編譯通過,出現下面的錯誤:
prog.fs(4,25): error: fs0001: thi***pression has type
intbut 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.13.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.fsi_0003._main()
stopped due to error
第七章 F 庫(二)
第七章 f 庫 二 反射 microsoft.fsharp.reflection 模組 這個模組包含了f 自己的反射 reflection 版本。f 中的某些型別和通用語言執行時 clr 的型別系統百分之百相容,但是,它們並不能被.net反映準確理解。例如,f 使用了某種技術實現了聯合型別,這對純f...
python第七章 python教程(第七章)
字典和集合 字典是python中唯一,乙個對映型別 如何建立乙個字典,如下 dict dict 滲透 網路安全 怎麼理解字典呢?現實生活中的字典可以通過首字母進行查詢要查詢的漢子,python也可以這樣理解,通過 前的元素查詢到冒號後的元素。為什麼說字典是唯一乙個對映型別呢?看圖。對映型別區別與序列...
第七章 函式
1.ansi c 允許函式原型的使用,函式宣告提供給編譯器和之後的呼叫函式返回值型別,引數型別和數量的資訊,而k c用單獨的列表給出引數的型別,編譯器只記住函式的返回值型別,但不儲存函式的引數數量和型別 2.沒有return語句的函式,隱式的返回 3.函式的原型可以單獨放於乙個標頭檔案中,一定要具有...