如何让这个匹配表达更简洁?

时间:2014-02-21 14:25:17

标签: f#

通过写二十一点来学习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

我有这个功能(现在忽略aces可以有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(*)

1 个答案:

答案 0 :(得分:6)

您需要通配符模式。规范(§7.4)说:

  

模式_是一个通配符模式,匹配任何输入。

let numericValue = function 
| Ace _-> 11
| King _
| Queen _
| Jack _ -> 10
| ValueCard(num, _) -> num
相关问题