欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

F#初學(xué)筆記04

類型和類型推斷
F#是強(qiáng)類型語言,意味著你不能用整型參數(shù)傳給只接受string類型參數(shù)函數(shù)中。你必須顯式的轉(zhuǎn)換。F#的類型系統(tǒng)和常規(guī)的編程語言不同。F#中,所有的值都有類型,包括哪些是函數(shù)的值。

 
通常,不需要顯式的聲明類型,編譯器根據(jù)值能推斷出類型。如果一切OK,編譯器會(huì)保持這樣的類型推斷。如果類型類型有錯(cuò)誤,編譯器會(huì)報(bào)錯(cuò)。VS開發(fā)中,可以把鼠標(biāo)指針懸浮在標(biāo)識(shí)符上查看類型。
let aString = "Spring time in Paris"
let anInt = 42
這兩個(gè)標(biāo)識(shí)符的類型很直白簡單
val makeMessage : int -> string
val half : int -> int

 
如果是標(biāo)識(shí)符的值是函數(shù),如
let makeMessage x = (Printf.sprintf "%i" x) + " days to spring time"
let half x = x / 2
類型則如下,注意前面還是val,表示函數(shù)仍然也是值:
val makeMessage : int -> string
val half : int -> int
第一個(gè)類型表示輸入整型返回string
第二個(gè)類型表示輸入整型返回整型

 
如下的定義
let div1 x y = x / y
let div2 (x, y) = x / y
let divRemainder x y = x / y, x % y
類型如下
val div1 : int -> int -> int
val div2 : int * int -> int
val divRemainder : int -> int -> int * int

 
第一個(gè)表示參數(shù)可以各自輸入
第二個(gè)用了*號(hào),表示參數(shù)是一個(gè)二元的元素,包含2個(gè)整型的元素作為單獨(dú)的輸入?yún)?shù)。
第三個(gè)的類型是int -> int -> int * int,輸入的是兩個(gè)int,返回的是一個(gè)元組。
let doNothing x = x
val doNothing : 'a -> 'a
上面的代碼看似什么也沒做,但是它的類型是'a -> 'a。表示接受一個(gè)類型,返回的是同樣的類型。任何由單引號(hào)(')前綴的類型,都是變量類型(variable type)。
F#有一種類型是obj,對應(yīng)的是System.Object,表示任何類型的值,概念和CLR中的System.Object差不多。但是變量類型(variable type)不是這樣的,注意,->兩端都是'a,意思是編譯器目前還不知道到底是什么類型。只知道返回的類型和輸入的類型是一致的。這個(gè)特征也稱作類型參數(shù)化,使得編譯器在編譯期間發(fā)現(xiàn)更多類型錯(cuò)誤,避免轉(zhuǎn)型。

 
變量類型(variable type),或者稱做類型參數(shù)化,它的概念和CLR2.0中泛型概念相近。F#的創(chuàng)立者Don Syme,在創(chuàng)立F#之前,就設(shè)計(jì)和實(shí)現(xiàn)了.NET CLR中的泛型。有人猜測可能正是由于他縣創(chuàng)建了泛型,才能創(chuàng)建F#。
let doNothingToAnInt (x: int) = x
let intList = [1; 2; 3]
let (stringList: list<string>) = ["one"; "two"; "three"]
val doNothingToAnInt _int : int -> int
val intList : int list
val stringList : string list

 
doNothingToAnInt函數(shù),演示了被約束的值,類型約束。參數(shù)x限制為int類型。我們不僅僅只在函數(shù)參數(shù)中,也可以限制任何標(biāo)識(shí)符為一種類型。
stringList演示了如何限制一個(gè)不是函數(shù)參數(shù)的標(biāo)識(shí)符。

 
限制值類型的語法很簡單,加個(gè)括號(hào),后面跟冒號(hào)(:),冒號(hào)后是參數(shù)名,這也稱做類型標(biāo)記。
intList的值是一個(gè)整型的list,標(biāo)識(shí)符的類型是 int list。表示編譯器已經(jīng)識(shí)別出這個(gè)list只包含整型,把其他類型加入這個(gè)list都會(huì)導(dǎo)致編譯錯(cuò)誤。
stringList有一個(gè)類型標(biāo)記,因?yàn)榫幾g器可以從value中解析出類型,所以這不是必須的。這樣的寫法使得F#看起來類似于.NET庫中的泛型類型。也可以用這種寫法 stringList : string list

本文標(biāo)題:F#初學(xué)筆記04
當(dāng)前地址:http://chinadenli.net/article28/gidecp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、微信小程序、響應(yīng)式網(wǎng)站微信公眾號(hào)、商城網(wǎng)站、品牌網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設(shè)