在Ocaml中,您可以在编译时执行此操作:
let handle item = match item with
| 1 -> "Do this";
| 2 -> "Do that";
| n -> "Do Nothing";
;;
有没有办法在运行时实现它?像某种责任链模式一样?
答案 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"