के अनुरूप नहीं प्रकार के साथ परेशानी हो रही है "प्रकार":प्रकार प्रकार लैम्ब्डा
trait Sys[ S <: Sys[S]]
trait Expr[S <: Sys[S], A]
trait Attr[S <: Sys[S], A[_]]
def test[ S <: Sys[S]]: Attr[S, ({type l[x<:Sys[x]]=Expr[x,Int]})#l] = ???
यह
error: kinds of the type arguments (S,[x <: Sys[x]]Expr[x,Int]) do not conform
to the expected kinds of the type parameters (type S,type A) in trait Attr.
[x <: Sys[x]]Expr[x,Int]'s type parameters do not match type A's expected parameters:
type x's bounds <: Sys[x] are stricter than type _'s declared bounds >: Nothing <: Any
def test[S <: Sys[S]]: Attr[S, ({type l[x<:Sys[x]]=Expr[x,Int]})#l] = ???
^
घोषित सीमा के साथ समस्या क्या है के साथ विफल हो? क्या मुझे trait Attr
के प्रकार कन्स्ट्रक्टर में उस cr * ppy आंशिक रूप से लागू प्रकार को ले जाने की आवश्यकता है? और क्यों? क्या मैं Attr
की परिभाषा को छूए बिना इसे ठीक कर सकता हूं?
मैं क्रम में समारोह test
में सीमा की जरूरत कार्यान्वयन काम करने के लिए करते हैं, लेकिन मैं कर सार्वजनिक इंटरफ़ेस Attr
करने के लिए उन सीमा पैदा करना नहीं चाहते हैं।
नोट: अगर मैं एक प्रकार का उपयोग सदस्य (मैं नहीं है क्या चाहते हैं), यह काम करता है:
trait Attr[S <: Sys[S]] { type A[_]}
def test[ S <: Sys[S]]: Attr[S] { type A[S <: Sys[S]] = Expr[S, Int]} = ???
आपके विश्लेषण के लिए धन्यवाद। यह समझ में आता है, हालांकि "ए [_]' "होने पर यह आपको" टाइप कन्स्ट्रक्टर "'ए [एनी]' कहने की अनुमति देता है, आप एक मूल्य कन्स्ट्रक्टर को कॉल नहीं कर सकते हैं, इसलिए रनटाइम के मामले में यह ठीक होगा IMO। दूसरी तरफ, मुझे लगता है कि यह टाइप बाधाओं का उपयोग कर संकलन-समय मेटा प्रोग्रामिंग के साथ समस्याएं पैदा कर सकता है? अंत में, समाधान (कम से कम जहां तक मैं इसका उपयोग कर रहा हूं) सरल है। उपयोग साइट 'ए [_]' के साथ बहुत कुछ नहीं कर सकती है और इस प्रकार की जानकारी 'test' के कॉलर के लिए अधिक है, इसलिए मैंने' ए 1 = ए [_] '' Attr' और 'test' में प्रतिस्थापित किया, फिर' Attr [एस, Expr [एस, Int]] '। –