OCaml Option get

后端 未结 3 1363
不知归路
不知归路 2021-02-14 07:06

I\'m new to OCaml, I\'m trying to understand how you\'re supposed to get the value from an \'a option. According to the doc at http://ocaml-lib.sourceforge.net/doc/Option.html,

3条回答
  •  忘了有多久
    2021-02-14 07:33

    The traditional way to obtain the value inside any kind of constructor in OCaml is with pattern-matching. Pattern-matching is the part of OCaml that may be most different from what you have already seen in other languages, so I would recommend that you do not just write programs the way you are used to (for instance circumventing the problem with ocaml-lib) but instead try it and see if you like it.

    let contents = 
       match z with
       Some c -> c;;
    

    Variable contents is assigned 3, but you get a warning:

    Warning 8: this pattern-matching is not exhaustive. Here is an example of a value that is not matched: None

    In the general case, you won't know that the expression you want to look inside is necessarily a Some c. The reason an option type was chosen is usually that sometimes that value can be None. Here the compiler is reminding you that you are not handling one of the possible cases.

    You can pattern-match “in depth” and the compiler will still check for exhaustivity. Consider this function that takes an (int option) option:

    let f x =
      match x with
      Some (Some c) -> c
      | None -> 0
      ;;
    

    Here you forgot the case Some (None) and the compiler tells you so:

    Warning 8: this pattern-matching is not exhaustive. Here is an example of a value that is not matched: Some None

提交回复
热议问题