2012-01-29 2 views
-3

잘 OCaml의 당신은 컴파일 시간에이 작업을 수행 할 수 있습니다 런타임에 그것을 실현하는 방법이OCaml에서 "동적"패턴 매칭이 가능합니까?

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

있습니까? 어떤 종류의 책임 패턴 처럼요?

+2

런타임을 수행하려는 것의 (의사) 코드 예제를 제공 할 수 있습니까? – phimuemue

+2

사람들이 [서로 다른 두 채널] (http://www.developpez.net/forums/d1179894/autres-langages/langages-fonctionnels/caml/pattern-matching-dynamique/)에서 같은 질문을 할 때 나는 그것을 싫어합니다. 도움이되는 사람들이 문제의 설명이나 이해력을 복제함으로써 시간을 낭비하지 않도록하는 좋은 방법입니다. 제발 다시하지 마세요. 도움이되는 사람들의 시간은 당신이 의지대로 낭비 할 수있는 자유로운 자원이지만 답변 뒤에있는 인간을 생각하는 것은 사물의 거대한 계획에서 사실 일 수 있습니다. – gasche

+0

나는 gasche에 동의한다. 다음에 OCaml에 관한 질문이있을 경우, 여기 또는 다른 곳에 질문하십시오. –

답변

2

예, 이러한 패턴이 있습니다. 당신이 "Do this"을 말하고자하는 경우

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

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

:

의 당신이 정수를 받아 문자열을 반환해야하는 기능을 처리한다고 가정하고, 기본적으로는 모든 정수에 대한 "Do nothing"가 반환하자 인수가 1 일 때 반환해야하는 경우 다음을 수행 할 수 있습니다.

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

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