OCaml中是否可以进行“动态”模式匹配?

时间:2012-01-29 13:58:03

标签: dynamic runtime pattern-matching ocaml

在Ocaml中,您可以在编译时执行此操作:

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

有没有办法在运行时实现它?像某种责任链模式一样?

1 个答案:

答案 0 :(得分:2)

是的,有这样的模式。

假设你正在处理一个必须接受一个整数并返回一个字符串的函数,默认情况下它会为每个整数返回"Do nothing"

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

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

如果你想说当参数为1时应该返回"Do this",你可以这样做:

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

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