2012-04-22 12 views
10

Đối với một dự án lớp, tôi viết một chương trình đánh giá hiệu suất của các triển khai khác nhau của cùng một cấu trúc dữ liệu trừu tượng. Vì tôi đang sử dụng mã giống hệt nhau để kiểm tra từng mã, tôi muốn có thể đặt bí danh mô-đun tùy thuộc vào đầu vào của người dùng và chỉ chạy mô-đun đó thông qua mã thử nghiệm.Bí danh mô-đun điều kiện

Nói cách khác, tôi muốn một cái gì đó như:

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

Có cách nào tôi có thể làm công việc này, hay tôi sẽ về điều này hoàn toàn sai?

Trả lời

11

Không có điều kiện về mức độ mô-đun, nhưng bạn có thể sử dụng module hạng nhất cho việc này:

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

Xin cảm ơn, đây chính xác là những gì tôi đang tìm kiếm! –

0

Là một theo dõi để @Andreas, ít nhất là trong các phiên bản gần đây ocaml bạn cũng có thể viết :

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

và với biểu mẫu này, bạn không phải ghi thông tin loại mô-đun trong tất cả các nhánh khớp: '(mô-đun M: MÔ HÌNH)' là đủ và sẽ lan truyền. – lavi