1'den MAGIC_NUMBER numaralı bir numara listem var mı? - Bunu önceden bildirebileceğim bir yol var mı?Sihirli sayılardan kaçınmak için, haskell'deki sabitleri nasıl kullanırım?
cevap
ile "sihirli" sayılar cebirsel değerlerin işlemek ve tüm hesaplamalarda cebirsel verileri kullanmak ve onlar gerçekten "sihirli" ise bazı değerleri adlı kullanabilir veya oluşturabilir daha birçok:
class FlagsMask f where mask :: f -> Int
data Magics = Alpha | Beta | Gamma
deriving (Enum, Read, Show, Eq, Ord)
instance FlagsMask Magics where
mask m = 2^fromEnum m
data PermsFlag = FlagRead | FlagWrite | FlagExec | FlagSuper
-- [flagRead, flagWrite, flagExec] = [2^n | n <- [0..2]]
(flagRead : flagWrite : flagExec : _) = [2^n | n <- [0..]]
flagSuper = 16
instance FlagsMask PermsFlag where
mask FlagRead = flagRead
mask FlagWrite = flagWrite
mask FlagExec = flagExec
mask FlagSuper = flagSuper
*Main> map fromEnum [Alpha .. ] [0,1,2] it :: [Int] *Main> zip [Alpha .. ] [1..] [(Alpha,1),(Beta,2),(Gamma,3)] it :: [(Magics, Integer)]
Elbette. Aslında, Haskell'in tamamen işlevsel olduğu göz önüne alındığında, sabit olmayan bir sabitden daha fazla tanımlamak daha kolaydır.
magicNumber = 42
magicList = [1..magicNumber]
Chuck's ve ofy'in yanıtları doğru. İkinci satırda magicNum
sadece f x = 'A'
gibi, her şeyi eşleşen bir desen olan -
magicNum = 42
f magicNum = 'A'
f _ = 'B'
ne beklediğiniz DEĞİLDİR: bilmeniz gereken bir tuzak var. f x | x == magicNum = 'A'
kullanın.
Aslında, standart operatörleri bu şekilde yeniden isimlendirebilirsiniz. Örneğin, 'f (==) a b = a == b' işlevini tanımlarsanız ve' f div 8 4' işlevini çağırırsanız, sonuç 2 olur, false olmaz. (Tabii ki, yapılacak bir patolojik şeydir.) – Chuck
- 1. X-Frame-Options başlığını eklemekten kaçınmak için Sinatra'yı nasıl kullanırım?
- 2. kaçınmak
- 3. "Sihirli nesneleri" tanımlamak için pythonik yolu ("sihirli sayılar" anlamında)
- 4. Dinamik polimorfizmden kaçınmak için CRTP
- 5. Ortam sabitleri
- 6. R? Için çıktı bileşenleri için $ nasıl kullanırım?
- 7. C# Dize Sabitleri İçin Derleme Zamanı Birleştirme
- 8. Windows'taki "sihirli" kitaplığı için eksik dosyalar
- 9. tuşundaki menüyü görüntülemekten kaçınmak için tıklayın
- 10. JavaScript'in eşdeğer() sihirli yöntem
- 11. PHP Sadece sabitleri içeren sınıflar
- 12. PHP'nin sihirli yöntem __call
- 13. phpDoc sınıf sabitleri belgeleri
- 14. Java'da Sabitleri Geçersiz Kılma
- 15. Dosya formatım için iyi bir sihirli sayıyı nasıl seçerim?
- 16. Sihirli dizeleri özel model bağlayıcılardan nasıl çıkarabilirim?
- 17. PHP sihirli yöntemler örnek
- 18. C# Sihirli Değnek Aracı
- 19. Python'da özel (sihirli) yöntemler
- 20. Python: sonsuz döngüden kaçınmak için __getattribute__
- 21. Kendiliğinden rastgele yürümeden kaçınmak
- 22. Sihirli WSDL URI sorgu parametresiyle nasıl çalışır?
- 23. Yinelenen anahtarlardan kaçınmak için txMongo ile nasıl eklenir?
- 24. JDBC sorgularında CheckStyle sihirli sayı hatalarını engellemek
- 25. Genel koleksiyon çağrı için Linq'i nasıl kullanırım?
- 26. Microsoft.Web.Deployment yüklemek için Add-Type'ı nasıl kullanırım?
- 27. Bir formu ajaxify için jQuery'yi nasıl kullanırım?
- 28. Ayrı XIB'leri yüklemek için UIPageViewController'ı nasıl kullanırım?
- 29. Cümlenin değiştirilmesi için RegExp Replace'ı nasıl kullanırım?
- 30. Uyumsuz değerleri ayırmak için türleri nasıl kullanırım
"Sayılar belirterek" ile ne demek istiyorsun? – ony
Netleştirmeniz gereken çok önemli bir nokta: büyü numarasını ne zaman biliyorsunuz? Derleme zamanında biliyorsanız, Chuck aşağıda doğru cevabı vardır. –