对有界随机数的穷举"匹配"

And*_*ack 1 f#

open System

let random_number_generator = System.Random(int System.DateTime.Now.Ticks) in
let random_number_below n = random_number_generator.Next(n) in
match random_number_below 3 with
| 0 -> "Zero!"
| 1 -> "One!"
| 2 -> "Two!"
;;
Run Code Online (Sandbox Code Playgroud)

根据编译器,上述匹配语句并非详尽无遗.这是完全合法的,因为F#有将保证随机数的范围没有语法信息.

Incomplete pattern matches on this expression. For example, the value '3' may indicate a case not covered by the pattern(s).
Run Code Online (Sandbox Code Playgroud)

对于一个随机数,匹配的惯用F#方式(或者只是if-else')是什么?

Joh*_*mer 6

正如在评论中一样,解决这个问题通常需要解决暂停问题.因此,最好的办法可能就是

|_ -> failwith "broken RNG"
Run Code Online (Sandbox Code Playgroud)