2012-04-22 22 views
10

Bir sınıf projesi için, aynı soyut veri yapısının farklı uygulamalarının performansını değerlendiren bir program yazıyorum. Her birini test etmek için aynı kodu kullandığım için, kullanıcı girdisine bağlı olarak bir modül takma adı ayarlayabilmek ve test modülünden bu modülü çalıştırmak istiyorum.Koşullu modül takma adı

let module M = 
    if model = "tree" then TreeModel else 
    if model = "hash" then HashModel else 
    ListModel 
in ... 

Bu işi yapabilir bir yolu var mı, yoksa her şeyi yanlış gidiyorum: Başka bir deyişle

, ben gibi bir şey istiyorum?

cevap

11

modül düzeyinde hiçbir koşul vardır, ancak bunun için birinci sınıf modülleri kullanabilirsiniz: En az da yazabilirsiniz son ocaml sürümlerinde @Andreas bir takip olarak

let m = match model with 
    | "tree" -> (module TreeModel : MODEL) 
    | "hash" -> (module HashModel : MODEL) 
    | "list" -> (module ListModel : MODEL) 
in let module M = (val m : MODEL) 
in ... 
+0

Teşekkürler, bu tam olarak aradığım şeydi! –

0

:

let (module M : MODEL) = match model with 
    | "tree" -> (module TreeModel : MODEL) 
    | "hash" -> (module HashModel : MODEL) 
    | "list" -> (module ListModel : MODEL) 
in ... 
+0

ve bu form ile, tüm eşleşme dallarında modül tipi bilgileri yazmak zorunda değilsiniz: '(modül M: MODEL)' yeterlidir ve yayılacaktır. – lavi

İlgili konular