2014-02-21 63 views
2

通過寫作二十一點學習F#。我有這幾種:如何讓這個表達更簡潔?

type Suit = 
| Heart = 0 
| Spade = 1 
| Diamond = 2 
| Club = 3 

type Card = 
| Ace of Suit 
| King of Suit 
| Queen of Suit 
| Jack of Suit 
| ValueCard of int * Suit 

我有這個功能(忽略現在尖子可以有2個不同的值):

let NumericValue = 
    function | Ace(Suit.Heart) | Ace(Suit.Spade) | Ace(Suit.Diamond) | Ace(Suit.Club) -> 11 
     | King(Suit.Heart) | King(Suit.Spade)| King(Suit.Diamond) | King(Suit.Club) | Queen(Suit.Heart) | Queen(Suit.Spade)| Queen(Suit.Diamond) | Queen(Suit.Club) | Jack(Suit.Heart) | Jack(Suit.Spade)| Jack(Suit.Diamond) | Jack(Suit.Club) -> 10 
     | ValueCard(num, x) -> num 

有沒有一種方法,我可以包括一系列的東西?像[Ace(Suit.Heart).. Ace(Suit.Club)]。或者甚至更好Ace(*)

回答

6

你想要一個通配符模式。規範(§7.4)說:

模式_是通配符模式並匹配任何輸入。

let numericValue = function 
| Ace _-> 11 
| King _ 
| Queen _ 
| Jack _ -> 10 
| ValueCard(num, _) -> num 
+0

我希望。編譯器告訴我Ace是一個構造函數;它不能單獨使用。 – dudeNumber4

+0

@ dudeNumber4你確定你在Ace之後放置通配符嗎? –

+1

@MatthewMcveigh,廢話,這就是我一直想念的! – dudeNumber4