2012-01-29 10 views
-3

まあOCamlでは、あなたは、コンパイル時にこれを行うことができます。実行時にそれを実現する方法はOCamlでは "動的な"パターンマッチングが可能ですか?

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

ありますか?責任パターンの連鎖のようなもの?

+2

ランタイムを実行するコードの例を(擬似)与えることができますか? – phimuemue

+2

私は人々が同じ質問を[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" 
関連する問題