Возможно ли "динамическое" сопоставление с образцом в OCaml? - PullRequest
0 голосов
/ 29 января 2012

Ну, в Ocaml вы можете сделать это во время компиляции:

let handle item = match item with
   | 1 -> "Do this";
   | 2 -> "Do that";
   | n -> "Do Nothing";
;;

Есть ли способ реализовать это во время выполнения? Как что-то вроде цепочки ответственности?

1 Ответ

2 голосов
/ 30 января 2012

Да, такая картина есть.

Предположим, что вы имеете дело с функцией, которая должна принимать целое число и возвращать строку, и что по умолчанию она будет возвращать "Do nothing" для каждого целого числа:

let func : (int -> string) ref = ref (fun _ -> "Do nothing") 

let _ = (!func) 1
- : string = "Do nothing"

Если вы хотите сказать, что "Do this" должно быть возвращено, когда аргумент равен 1, вы можете сделать:

let () = 
  let old = !func in 
  func := (function 1 -> "Do this" | n -> old n)

let _ = (!func) 1
- : string = "Do this"
...