F# ≥ C# (Pattern matching)

來源:互聯網
上載者:User

今天這篇文章我們來談談F#的模式比對,模式比對在F#中充當著很重要的角色,msdn是這麼描述它的:“模式”是用於轉換輸入資料的規則。模式將在整個 F# 語言中使用,採用多種方式將資料與一個或多個邏輯結構進行比較、將資料分解為各個構成部分,或從資料中提取資訊。從某種情況來看,它與C#中的switch蠻類似的,不過在F#中,模式比對的功能遠遠多於switch,好吧,接下來讓我們一起享受這次的F#之旅吧~內容不在多,在於精闢易於理解~

在介紹它之前,讓我們先來看看如下代碼:

let a = 1       //nothing fancylet b = 1, 2  // b is tuple now

這裡定義的b是一個元組,元組這個概念我們之前有聊過,同時也將它與C#中的Swap進行過對比,有興趣的朋友可以點擊這裡查看詳細資料。回到本文,在上面的代碼中,對於習慣於C#開發的朋友來說,如果你想要得到元組的第一個和第二個元素,最明顯的方式是調用 fst 和 snd 函數,這當然是一種辦法,但是現在,我們可以使用模式比對還達到相同效果:

let c,d = b   // c = 1 and d = 2

接下來,我們來試著使用模式比對分解一個列表:

let l = [1;2;3;4]match l with| h::t -> ...     // h is 1 and t is [2;3;4]| _ -> ...

關於::(cons)運算子,它有兩個功能,第一是可以將元素附加到列表中,第二是將列表頭與列表尾分離,這裡使用的是第二個功能。上面的代碼中我們看到,一個列表的列表頭與列表尾分離開,因此得到了我們想要的結果,那麼,如果你需要得到1,2而剩下3,4該怎麼做呢?同樣很簡單,看如下代碼:

match l with| h0::h1::t -> ... // h0 is 1, h1 is 2, and t is [3;4]| _ -> ...

如果列表的長度是已知的,比如列舉的這個例子,我們的列表只有4個元素,那麼你也可以用以下方式分解這個列表:

match l with| [a;b;c;d] ->     //a=1, b=2, c=3, and d=4| _ -> ...

好了,今天的pattern matching介紹完了,是不是有所收穫呢?同時,我也很好奇,應該如何使用C#來實現相同的功能。:)

註:此文為譯文,如有興趣請查看blogspot中博主的原文:http://apollo13cn.blogspot.com/2012/11/f-c-pattern-matching.html

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.