ben (belki bataryalarında) birkaç modülleri gördüğümü hatırlamıyorum, ayrı ayrı ve sadece gerçekten istediğinde. Eğer Rational.Infix
modülü açmak için olsaydı Böylece örneğin,
module Rational =
struct
let add a b = ...
let sub a b = ...
module Infix =
struct
let (<+>) = add
let (<->) = sub
end
end
için, de-kapsamını olmaz (?) Rational
bir şey aynı isimdeki herhangi işlevleri.
types
işaretini ayırmak için modülleri kullandığımız bir proje üzerinde çalışıyorum. Bir modüle sahip olmak sadece bir tür tanımlar ve bu türleri işlemek organizasyonda yardımcı olur; Özellikle modüller küçükse ve ayrı bir dosyaya sahip olduğunda avantajlı olmaz ve varyant türleri anlam ifade etmez.
module Node =
struct
end
module Edge =
struct
end
type 'a tree = { nodes : 'a Node.t; edges : 'a Edge.t; }
Biz de bunları kullanmak, her ne kadar biyolojik veri --Nexus, Fasta, PHYLIP, vesaire için gereken tüm ayrıştırıcıları (-mlpack ile kombine) olarak ayrı dosyalar. Son olarak, genellikle yeni bir algoritmanın prototipini hazırlarken, önce ocaml olarak yazacağız, daha sonra bir C versiyonu üzerinde çalışacağız. Ocaml versiyonunu genellikle aynı fonksiyon isimlerine sahip bir iç modülde tutarız.
module Align =
struct
module OCaml =
struct
end
end
İç içe geçmiş modüller mükemmel bir anlam ifade eder. Ancak soru, iç içe geçmiş modül * imzaları hakkında soru soruyor *. –
Michael, Soruya yalvarıyor gibi görünüyorsun. Yuvalanmış modüllerin kesin faydaları, yuvalanmış modül imzalarının gerekliliğini ortaya çıkarır. – nlucaroni