Type
और DataType
खुद को दोनों प्रकार के होते हैं। और अधिकांश प्रकारों का प्रकार है, जैसा कि आपने पाया है, DataType
। - जूलिया
में इतने प्रकार
isa
दोनों हैं
julia> supertype(DataType)
Type{T}
julia> supertype(Type)
Any
julia> DataType <: Type
true
इसका मतलब यह है कुछ भी है कि isa
DataType
भी एक Type
हो जाएगा कि: इस मामले में, DataType
सार Type
की एक उप-प्रकार है। Type
के अन्य उपप्रकार भी हैं, जिनमें Union
एस और TypeConstructor
एस शामिल हैं। इसका मतलब है कि जूलिया में सभी प्रकार Type
प्रकार होंगे, लेकिन Vector
जैसी साधारण चीजें DataType
प्रकार की नहीं होंगी।
Type
विशेष है। जैसा कि आप ऊपर देखते हैं, यह पैरामीट्रिक है। यह आपको प्रश्न में एक विशिष्ट प्रकार के प्रकार को सटीक रूप से निर्दिष्ट करने की अनुमति देता है। इसलिए जब जूलिया isa
Type
में हर प्रकार, केवल Int
isa
Type{Int}
:
julia> isa(Int, Type{Int})
true
julia> isa(Float64, Type{Int})
false
julia> isa(Float64, Type)
true
इस क्षमता विशेष और Type
के लिए अद्वितीय है, और यह प्रेषण एक विशिष्ट प्रकार पर निर्दिष्ट किया जा करने के लिए अनुमति में आवश्यक है। उदाहरण के लिए, कई फ़ंक्शंस आपको अपने पहले तर्क के रूप में एक प्रकार निर्दिष्ट करने की अनुमति देते हैं।
f(x::Type{String}) = "string method, got $x"
f(x::Type{Number}) = "number method, got $x"
julia> f(String)
"string method, got String"
julia> f(Number)
"number method, got Number"
कि Type{Number}
केवल, Number
के प्रकार, और नहीं Int
के प्रकार है भी Int <: Number
हालांकि यह ध्यान देने योग्य है! यह पैरामीट्रिक invariance है। एक विशेष सार प्रकार के सभी उप-प्रकारों, आप एक समारोह पैरामीटर का उपयोग कर सकते हैं की अनुमति देना:
julia> f(Int)
ERROR: MethodError: no method matching f(::Type{Int64})
julia> f{T<:Integer}(::Type{T}) = "integer method, got $T"
f (generic function with 3 methods)
julia> f(Int)
"integer method, got Int64"
प्रश्न में विशिष्ट प्रकार के कब्जा करने के लिए एक समारोह पैरामीटर के रूप में शक्तिशाली और अक्सर इस्तेमाल किया है की क्षमता। ध्यान दें कि मुझे तर्क नाम निर्दिष्ट करने की भी आवश्यकता नहीं है - इस मामले में महत्वपूर्ण एकमात्र चीज Type{}
के भीतर पैरामीटर है।
तो है कि क्या वास्तव में एक बहुत संक्षिप्त उत्तर है के लिए एक सुंदर लंबे विवरण था: आप आम तौर पर, DataType
का उपयोग करने के बाद से यह जूलिया में सभी प्रकार के कवर नहीं किया जाएगा नहीं करना चाहती। इसके बजाय आपको किसी भी या सभी प्रकार के प्रकार का वर्णन करने के लिए Type
का उपयोग करना चाहिए। Type{T}
का उपयोग करें जब आप विशेष रूप से T
के प्रकार का वर्णन करना चाहते हैं।
'टाइपटाइप' को अधिकांश उपयोग मामलों के लिए 'डेटाटाइप' को प्राथमिकता दी जानी चाहिए, क्योंकि 'डेटा टाइप' में केवल कुछ प्रकार जैसे 'स्ट्रिंग' या 'नंबर' शामिल हैं, लेकिन' वेक्टर 'या' यूनियन {Int, Float64} 'नहीं है। –
ओपी के सवाल का अधिक जवाब देने के लिए, जबकि कई प्रकार 'डेटा टाइप' हैं, सभी नहीं हैं। सभी प्रकार 'टाइप 'हैं। V0.5 पर 'टाइप' के ठोस उपप्रकार' डेटा टाइप ',' टाइपकॉन्स्ट्रक्टर 'और' यूनियन 'हैं; 0.6 पर यह सूची 'डेटाटाइप', 'BottomType', 'Union', और' UnionAll' है। –
आह, ठीक है। सुधारों के लिए धन्यवाद। जब मुझे मौका मिलता है तो मैं इसे संपादित कर दूंगा। –