2012-11-16 7 views
5

कल्पना कीजिए मैं निम्नलिखित वर्ग परिभाषा है:तक नाम प्रकार पैरामीटर

class Foo[T] 

और मैं निम्नलिखित

def bar(x:Foo[ =>Int ]):Int = ??? 

क्या करना चाहते हैं लेकिन संकलक "के साथ किसी भी तरह से नाम पैरामीटर प्रकार यहाँ की अनुमति दी विफल रहता है "

मैं एक सामान्य विधि के लिए टाइप पैरामीटर के रूप में उप-नाम प्रकार का उपयोग कैसे कर सकता हूं?

उत्तर

9

आपको अपना आलसी आवरण प्रदान करना होगा। कुछ इस तरह:

class Lazy[T](wrp: => T) { 
    lazy val value: T = wrp 
} 

और उसके बाद:

def bar(x: Foo[Lazy[T]]): Int = ??? 
+0

किस बारे में 'वर्ग लेज़ी [टी] (वैल मूल्य: => टी)'? मूल्य धारक को दोहराने की जरूरत नहीं है। – pedrofurla

+3

@pedrofurla। अनुमति नहीं है (वैल पैरामीटर नाम से कॉल नहीं किया जा सकता है)। और यदि यह था, तो किस समय मूल्य शुरू किया जाना चाहिए? –

+1

अजीब। उसे नहीं पता था। मुझे लगता है कि वे पहली कॉल में init-ed होगा। – pedrofurla