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

dud*_*er4 2 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
Run Code Online (Sandbox Code Playgroud)

我有这个功能(暂时忽略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
Run Code Online (Sandbox Code Playgroud)

有没有办法可以包含一个范围或什么?喜欢[Ace(Suit.Heart).. Ace(Suit.Club)].甚至更好的Ace(*)

kae*_*fer 6

你想要一个通配符模式.规范(§7.4)说:

模式_是通配符模式并匹配任何输入.

let numericValue = function 
| Ace _-> 11
| King _
| Queen _
| Jack _ -> 10
| ValueCard(num, _) -> num
Run Code Online (Sandbox Code Playgroud)