2016-10-26 6 views
5

यह संभव प्रकार प्रदाताओं के माध्यम से एक सामान्य प्रकार बनाने के लिए इतना है किप्रकार प्रदाता के माध्यम से सामान्य प्रकार बनाना

[<TypeProvider>] 
type SampleTypeProvider(config: TypeProviderConfig) as this = 

... 
//the below would be the generated type 
type A<'b>() = 
    member this.C() : 'b = ... 
    member this.D() : 'b = ... 
// 
... 
[<assembly:TypeProviderAssembly>] 
do() 
    .... 

ताकि उपयोग परिदृश्य में कुछ

#r @".\bin\Debug\SampleTypeProvider.dll" 
type A = SampleTypeProvider.A 
type intA = A<int> 
type strA = A<str> 

देने का प्रयास करेगा है और अगर वह यह है कि संभव - मैं इसे कैसे देख सकता हूं।

उत्तर

4

मानक विधियों का उपयोग करना संभव नहीं है। मैंने चारों ओर देखने की कोशिश की, लेकिन एक कैनोलिक संदर्भ नहीं मिला, लेकिन यह एक ज्ञात सीमा है और प्रतिबंध को उठाने के लिए कई सुझाव दिए गए हैं।

रॉस मैककिनले में Mixin type provider नामक कुछ हद तक चरम परियोजना है जो वास्तव में प्रकार प्रदाता चलाने के दौरान F # स्रोत कोड के साथ फ़ाइल उत्पन्न करके इस पर काम करता है (और फिर आप इस प्रोजेक्ट को अपनी प्रोजेक्ट में शामिल कर सकते हैं)। यह प्रदाता प्रदाता की तुलना में शायद अधिक कोड-पीढ़ी है, लेकिन उसकी talk about the topic कुछ सीमाओं का भी एक अच्छा स्पष्टीकरण है।

इस पते को कैसे हल करें इस प्रकार प्रदाता के उद्देश्य पर निर्भर करता है। यदि आपको केवल सीमित प्रकार की आवश्यकता है, तो आप स्थिर मानकों की तरह कुछ उपयोग कर सकते हैं और A<"int"> या A<"string"> लिख सकते हैं। आप सामान्य गैर-प्रदत्त सामान्य प्रकारों को गैर-सामान्य प्रदान किए गए प्रकारों (कुछ चालाक तरीके से) के साथ भी मिश्रण कर सकते हैं। लेकिन मुझे लगता है कि बेहतर जवाब पाने के लिए आपको अपने ठोस उपयोग मामले के बारे में अधिक लिखना होगा।

+0

श्वास। मैं एक अलग जवाब की उम्मीद कर रहा था, जिसे मैंने आपके द्वारा दिया था। – robkuz

संबंधित मुद्दे