में हास्केल के किसी भी प्रकार का एनालॉग बनाना, मैं जूलिया में हास्केल से Data.Either
प्रकार का एनालॉग बनाना चाहता हूं। v0.5 में निम्न काम करता है:जसलिया
immutable Either{T, S}
left :: Nullable{T}
right :: Nullable{S}
end
either{T, S}(::Type{T}, ::Type{S}, value::T) = Either(Nullable{T}(value), Nullable{S}())
either{T, S}(::Type{T}, ::Type{S}, value::S) = Either(Nullable{T}(), Nullable{S}(value))
a = either(Int64, String, 1)
b = either(Int64, String, "a")
println(a)
println(b)
मेरा प्रश्न है: यह संभव है निम्नलिखित निर्माण काम करने के लिए:
a = Either{Int64, String}(1)
b = Either{Int64, String}("a")
(इस तरह से एक अतिरिक्त निर्माता समारोह की आवश्यकता नहीं है)।
ऐसा लगता है कि वस्तु बनाने के लिए पर्याप्त जानकारी होनी चाहिए, लेकिन अब तक मैं संकलक को किसी भी प्रकार के संस्करणों को स्वीकार करने के लिए राजी नहीं कर सकता; जैसे
ERROR: LoadError: MethodError: no method matching Either{T,S}(::Nullable{Int64}, ::Nullable{String})
उन रचनाकारों को प्रकार ("बाहरी रचनाकार") की परिभाषा के बाहर (बाद) डालने का प्रयास करें। –
मुझे यकीन नहीं है कि इसे कैसे काम करना है। 'या तो {टी, एस} (मूल्य :: टी) = या तो {टी, एस} (निरर्थक {टी} (मूल्य), निरर्थक {एस}())' (और 'मूल्य :: एस' के लिए एनालॉग) उत्पादन करता है बाएं हाथ में 'एस' का उपयोग अप्रयुक्त होने के बाद से एक चेतावनी है। – fjarri
वैसे, आप वास्तव में ऐसा क्यों करना चाहते हैं? जूलिया में ऐसा करने के लिए यह एक अप्राकृतिक बात है, जो लगभग निश्चित रूप से किसी अन्य तरीके से बेहतर हो सकती है, उदाहरण के लिए एकाधिक प्रेषण। –