आप निश्चित रूप से पूर्ण आइवरी टॉवर (® स्कॉट Wlaschin)
बारे में के रूप में जाने का विकल्प होता है:
type Thing =
| Eagle
| Elephant of int
type MaybeElephantBuilder() =
member this.Bind(x, f) =
match x with
| Eagle -> 0
| Elephant a -> f a
member this.Return(x) = x
let maybeElephant = new MaybeElephantBuilder()
let l =
[ Elephant(1000)
Elephant(1200)
]
let printIt v =
let i =
maybeElephant {
let! elephantValue = v
return elephantValue
}
printfn "%d" i
l |> Seq.iter printIt
यह भी सामान ईगल्स वहाँ में फेंक दिया के साथ संभाल लेंगे!
खैर ...
गैर ईगल्स निकालें और कोड के लिए उड़ान भरने जाएगा ...
let l =
[ Eagle
Leadon
Elephant(1000)
Eagle
Meisner
Elephant(1200)
Eagle
Felder
]
l |> Seq.iter printIt
लेकिन कोई। ये अच्छा नहीं है। यह छोटा नहीं है। मज़े के लिए यह और अधिक है (अगर वह!) किसी और चीज़ की तुलना में। यह शायद एफ # गणना अभिव्यक्तियों का सबसे बुरा दुरुपयोग भी है!
और आप को कहीं भी मिलान करने वाले पैटर्न की आवश्यकता होगी।
Thx स्कॉट! और पेट्रीसेक।
वास्तविकता के लिए गणना अभिव्यक्ति चिड़ियाघर! ;-)
स्रोत
2015-05-27 20:25:55
खराब पैटर्न मिलान क्यों? –
अच्छी तरह से आप 'सदस्य' या कार्यों का उपयोग कर सकते हैं ... लेकिन उन्हें पैटर्न-मिलान का उपयोग करके deconstruct करने की आवश्यकता होगी - लेकिन वास्तव में आप और क्या उम्मीद कर सकते हैं? – Carsten