2011-12-15 3 views

cevap

16

korumalar when parçalardır matching- vardır. Ne derleyici anlatıyor sizin maç (tüm olası durumları kapsar) ayrıntılı olup olmadığını söyleyemem, ancak olmayabilir olmasıdır. tüm ayrıntıları keyfi ifadeleri undecidable çünkü derleyici gerçekten kesin söyleyemem. derleyici sadece maç ayrıntılı olduğunda, son durumda bir bekçi gereksiz olacağı için bir bekçi olmadan en az bir desen olmalıdır rakamlar.

Eğer maç ayrıntılı olduğunu bildiğimiz için, derleyici temelde doğru. İkinci gardınız gereksiz.

match z with 
| y when List.length z = 0 -> ... 
| y -> ... 

Bu, derleyiciyi mutlu edecektir.

Şu uyarıyı gibi; Yıllar boyunca benim için birkaç mantık hatası buldu.

bu kod sadece bir örnektir değil ama gerçekten yazdıklarını ise

, böyle yazmak çok daha deyimsel olacaktır:

match z with 
| [] -> ... 
| head :: tail -> ... 

O 'kazandığından beri de bir nebze daha verimli Listenin uzunluğunu hesaplamak için uğraşın ve sonucu atın. listeyi destructure gerek yoksa

, hala daha basit yapabilirsiniz:

if z = [] then 
    ... 
else 
    ... 
+0

Teşekkür Jeffrey. Gerçekten şeyler netleşmiştir ve bana (özellikle eğer ifadelere) temizleyici kod yazma öğrenmek yardımcı oldu. :) – Aspen

İlgili konular