2012-11-16 8 views
25

मैंने अपने निर्माण में स्केलैक कमांड लाइन तर्क -Ywarn-value-discard जोड़ा है क्योंकि इससे मेरे कोड में एक सूक्ष्म बग पकड़ा होगा। हालांकि, अब मुझे "छोड़े गए गैर-यूनिट मूल्य" के लिए कुछ चेतावनियां मिलती हैं जो जानबूझकर त्यागों के बारे में हैं, बग नहीं। मैं उन चेतावनियों को कैसे दबा सकता हूं?"छोड़ा गया गैर-यूनिट मान" चेतावनी दबाएं

उत्तर

34

आप अन्वेषण रूप से यूनिट लौटने से इन चेतावनियों को दबाते हैं (जो () है)।

def method2(): Unit = { 
    val _ = method1() 
} 

def method1() = { 
    println("Hello") 
    "Bye" 
} 
def method2() { 
    method1() 
() // Explicitly return unit 
} 
+0

क्या आप 'method2' में 'method1' को कॉल करते समय _non-unit value_ को नहीं हटाते हैं? – botchniaque

+1

पहला स्निपेट एक ऐसा मामला दिखाता है जो ** ** चेतावनी को ट्रिगर करता है (जब '-Ywarn-value-discard' सक्षम है), तो हां वास्तव में इस मामले में एक गैर-इकाई मान ('method1' का वापसी मान) 'method2' में 'method1' को कॉल करते समय त्याग दिया जाता है। दूसरा स्निपेट स्पष्ट रूप से "यूनिट" (दूसरे शब्दों में '() ') देता है, जिससे चेतावनी को हटा दिया जाता है। –

8

this answer के अनुसार, आप भी वाक्य रचना val _ उपयोग कर सकते हैं, यानी लेकिन वहाँ है कि क्या इस पर कुछ विवाद है: उदाहरण से यह बारी:

में
def method1() = { 
    println("Hello") 
    "Bye" 
} 
def method2() { 
    method1() // Returns "Bye", whihc is implicitly discarded 
} 

या @ रेगिस द्वारा उत्तर पसंदीदा शैली है।

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