Her şey aşırı yükleme nedeniyle ne demek istediğinize bağlıdır. Aşağıdaki gibi birkaç kullanım durumu vardır:
Her zamanki infix operatörleri adını tamsayılardan başka bir şeyi manipüle eden matematiksel bir ifadede kullanmak isterseniz: operatörlerinizi yerel olarak yeniden yönlendirin; modüller ve "yerel açık" bu konuda yardımcı olabilir. Eğer bir operasyon kullanılan sayısal tür tipinde polimorfik olmasını istiyorsanız
module I32 = struct
open Int32
let (+), (-), (*), (/), (!!) = add, sub, mul, div, of_int
end
... I32.(x + y * !!2) ...
, bu tür sayısal operatörler üzerinde soyut gerekir. Örneğin (bir tamsayı olarak) jenerik hızlı üs alma fonksiyonu için, bu size kümesi olarak üzerinde "aşırı yük" istediklerini yakalamak için vb matrisleri Daha genel
let rec pow (*) one a = function
| 0 -> one
| n -> pow (*) (if n mod 2 = 0 then one else one * a) (a * a) (n/2)
let() = assert (pow (*.) 1. 2. 3 = 8.)
, evet, fikir üzerinde kullanılabilir operatörler (burada infix operatörleri, ancak düz isimler iyi ve okunabilirlik için genellikle daha iyidir) ve bu operasyonların sözlükleri üzerinde etraflı ve soyut - aslında Haskell tipi sınıfların derlenmesi gibi.
Burada I32 modülünde bir 'açık Int32' yaptığınızı fark ettim, bunun yerine orada bir 'Int32'yi dahil etmiş olsaydınız ne farklı olurdu? Bu bağlamda esas olarak eşdeğer mi? – aneccodeal
@aneccodeal: bu çok farklı olurdu: eğer 'include' kullanmış olsaydım, bu 'I32 'tüm Int32'leri içerir, yani' I32' yerel olarak açmak özellikle Int32'nin tüm tanımlarını alır. Kullanıcı açıklamalarını gölgelemekten dolayı büyük açıkları açmamayı tercih ederim. – gasche