let f (O: obj) =
match O with
| :? (obj -> list<obj>) -> "win"
| :? list<obj> -> "list!"
| _ -> "fail"
Console.WriteLine(f(fun x -> ["lol"]))
Console.WriteLine(f(["lol"]))
प्रिंट "विफल" दो बार, जैसा कि मुझे लगता है कि यह चाहिए, क्योंकि मैं मुझे obj -> list<String>
फ़ंक्शन दे रहा हूं, जो obj -> list<obj>
नहीं है। क्या उन्हें मैच बनाने का कोई तरीका है? मैं प्रत्येक सूची को list<obj>
में से गुमनाम कार्य करने से पहले उजागर कर सकता हूं, या मैं इसे सूची में रखने से पहले obj
पर सब कुछ बढ़ा सकता हूं।एफ # पैटर्न मिलान: मिलान कार्य/उपप्रकारों की सूचियां?
इनमें से कोई भी काम करता है और इसे मेल खाता है, लेकिन मैंने सोचा कि यह समस्या थी कि कॉन्वर्सिस/contravariance पहले ही हल हो गया था? अगर मुझे गलती है तो मुझे सही करें
एफ # सह/contravariance का समर्थन नहीं करता है। – Daniel