通过写二十一点来学习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(*)
你想要一个通配符模式.规范(§7.4)说:
模式_是通配符模式并匹配任何输入.
let numericValue = function
| Ace _-> 11
| King _
| Queen _
| Jack _ -> 10
| ValueCard(num, _) -> num
Run Code Online (Sandbox Code Playgroud)