Wildcard matching

If I put the preceding scripts into Visual Studio, the F# source code editor will draw a blue warning squiggle line under the ``compare me`` comparison expression, indicating that the set of rules in this match construction is not exhaustive, as shown in the following screenshot:

Wildcard matching

An example of an incomplete pattern matching

The compiler even gives a sample value of ``compare me``, which is not going to match. Although this value is not present within the definition of type Multiples, if I synthetically create this value as enum<Multiples>(1) and feed it as an argument into transformB, the result would be the run-time exception of type Microsoft.FSharp.Core.MatchFailureException. This situation should raise the following question: how would it be possible to put a match all rule into the match, which means anything that was not specified in preceding rules?

For this purpose, F# offers the special wildcard pattern  _ that matches anything that was not matched in the preceding rules. With its help and turning to the idiomatic F# way of processing undefined values by presenting the result as a value of type option, the function processing only legitimate Multiples values may be defined as shown in the following code (Ch4_1.fsx):

let transformB' m = 
  match m with 
  | Multiples.Zero -> Some "0" 
  | Multiples.Five -> Some "5" 
  | _ -> None 

Now, the match within the transformB' definition carries the exhaustive set of match cases. Any legitimate value of Multiples given as m will be transformed into a correspondent Somestring option value, and any non-legitimate value of the m argument will be transformed into a None result.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset