2015-04-15 21 views
6

Bunun hakkında gerçekten aptal hissediyorum, ancak bu konuda dokümantasyon bulmakta çok zorlanıyorum.F # içinde bir Yapı'nın yeni bir örneğini nasıl oluştururum?

ben şöyle bir yapı bildirmek durumunda: Ben BuildNumber türde yeni bir örneğini yapmak nasıl Sonra

type BuildNumber = 
    struct 
     val major : int 
     val minor : int 
     val build : int 
     val revision : int 
    end 

?

+3

Not rekor kullanarak tercih edilir. – scrwtp

+0

Bahşiş için teşekkürler! Rekoru daha iyi yapan nedir? –

+4

Yapılar, F # cinsindeyken aynı şey için yararlıdır çünkü zamana duyarlı sayı çatlama için veriyi yığında tutar. Bununla birlikte, bazı yararlı F # deyimleri ve veri yapıları, verilerin istem dışı olarak yığında kalmasına neden olabilir ve bu düşük düzeyli optimizasyon türü, F # gibi üst düzey bir işlevsel dilde daha az yaygındır. Ayrıca, performans nedenleriyle bir yapı kullanmıyorsanız, F # Records ile çalışmak daha güzel olur. –

cevap

3

new anahtar sözcüğünü kullanın ve bunun için bir oluşturucu tanımlayın. Örneğin

: yapılar nadiren F # iyi bir fikir vardır

type simple = 
    struct 
     val A : int 
     val B : int 
     new (a: int, b: int) = { A = a; B = b; } 
    end 

let s = new simple(1, 2) 
+0

Tanımda "yeni" yoksa, türün bir örneğini oluşturmak imkansız mı? Eğer öyleyse, işe yaramaz mı? –

+1

@EricDand Hala yeni basit() yapabilirsiniz ve bu sadece iyi çalışır. Ancak, tüm alanlar tür için varsayılan değer (bu durumda sıfır) ve değişmez olacaktır. Yani% 100 işe yaramaz, ama oldukça yakın. –

+4

Bir yapı türü tasarlıyorsanız, önemli olan, yapılandırmaların her zaman sıfır başlatılmış olabileceği (yani "parametresiz yapıcı" ile oluşturulmuş), null ya da gerçek, bildirilmiş bir kurucudan geçmesi gereken ref türlerinin tersine olabileceğidir. Dolayısıyla, yapıya yöntem eklerseniz, tüm alanların varsayılan olduğu durumda her zaman davayla uğraştığınızdan emin olun (bu işlem geçersiz op istisnası atmak kadar kolay olabilir). – latkin

İlgili konular