中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

F#初學筆記04

發布時間:2020-04-07 14:09:56 來源:網絡 閱讀:525 作者:cnn237111 欄目:編程語言
類型和類型推斷
F#是強類型語言,意味著你不能用整型參數傳給只接受string類型參數函數中。你必須顯式的轉換。F#的類型系統和常規的編程語言不同。F#中,所有的值都有類型,包括哪些是函數的值。

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

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

 
如下的定義
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

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

 
變量類型(variable type),或者稱做類型參數化,它的概念和CLR2.0中泛型概念相近。F#的創立者Don Syme,在創立F#之前,就設計和實現了.NET CLR中的泛型。有人猜測可能正是由于他縣創建了泛型,才能創建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函數,演示了被約束的值,類型約束。參數x限制為int類型。我們不僅僅只在函數參數中,也可以限制任何標識符為一種類型。
stringList演示了如何限制一個不是函數參數的標識符。

 
限制值類型的語法很簡單,加個括號,后面跟冒號(:),冒號后是參數名,這也稱做類型標記。
intList的值是一個整型的list,標識符的類型是 int list。表示編譯器已經識別出這個list只包含整型,把其他類型加入這個list都會導致編譯錯誤。
stringList有一個類型標記,因為編譯器可以從value中解析出類型,所以這不是必須的。這樣的寫法使得F#看起來類似于.NET庫中的泛型類型。也可以用這種寫法 stringList : string list
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

原阳县| 晋州市| 红河县| 苗栗县| 康乐县| 西吉县| 星子县| 乌兰察布市| 河北省| 舞钢市| 荃湾区| 巨野县| 白银市| 新野县| 洛浦县| 巴彦淖尔市| 青铜峡市| 平原县| 晴隆县| 曲阳县| 肥西县| 加查县| 疏勒县| 林周县| 会泽县| 阳新县| 凌海市| 丹东市| 布拖县| 商城县| 平定县| 晴隆县| 灵丘县| 襄樊市| 香河县| 恩平市| 灵石县| 古丈县| 八宿县| 宣武区| 奉化市|