2017-11-25 14 views
5

मेरे पास निम्न विधि है। इसका तर्क बहुत आसान है, यदि सही सेट किया गया है तो उसके पास एक मूल्य (शून्य नहीं) होने पर बाएं कॉल करें। जब मैं इसे निम्न तरीके से लिखता हूं, तो यह काम करता है।कोटलिन कंपाइलर यह नहीं समझ सकता कि चर चरम पर लचीला नहीं है जबकि लूप

fun goNext(from: Node): Node? { 
    var prev : Node = from 
    var next : Node? = from.right 
    if (next != null) { 
     prev = next 
     next = next.left 
     while (next != null) { 
      prev = next 
      next = next.left 
     } 
    } 
    return prev 
} 

, तो इसके बजाय, मैं कोड एक do-जबकि पाश का उपयोग कर कम करने के लिए प्रयास करते हैं, यह अब स्मार्ट nextNode को डाले। यह इस त्रुटि दिखाता है:

Type mismatch. 
Required: Node<T> 
Found: Node<T>? 

कोड इस प्रकार है:

fun goNext(from: Node): Node? { 
    var prev : Node = from 
    var next : Node? = from.right 
    if (next != null) { 
     do { 
      prev = next // Error is here, even though next can't be null 
      next = next.left 
     } while (next != null) 
    } 
    return prev 
} 
+2

आप केवल 'जबकि (अगला! = शून्य) {...} 'को सरल क्यों नहीं करते? –

+0

आप सही हैं! मैंने इसे नहीं देखा। – biowep

उत्तर

-1

संकलक शायद यह मानता है कि अगले अगर बयान और एक अन्य धागे से पाश के बीच बदला जा सकता है। चूंकि आप आश्वस्त कर सकते हैं कि अगला शून्य नहीं है, बस जोड़ें !! लूप में इसका उपयोग करते समय अगली बार: अगला !!

+0

फिर यह स्थिति के दौरान भी बदल सकता है और assingment 'prev = next' – biowep

+0

@biowep prev = next !! फिट होना चाहिए, है ना? – Zonico

+0

निश्चित रूप से, यह करता है, लेकिन यह एक गैर सुसंगत व्यवहार के आसपास एक काम है, यह भी एक आवश्यक नियंत्रण शुरू करता है। – biowep

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