2011-07-19 20 views

उत्तर

25
def foo(x: Int): Boolean = 
    x match { 
     case _ if x > 1 => true 
     case _ if x < 1 => false 
    } 

ध्यान दें कि आप एक्स == 1 हालांकि के लिए एक मामला नहीं है ...

+0

धन्यवाद। हाँ वास्तविक परीक्षण भूल जाओ, यह वाक्यविन्यास के मुद्दों के बारे में अधिक था। –

+0

आप शायद सही श्रेणी में 1 मान शामिल करना चाहते हैं: 'case _ अगर x> = 1' –

+0

बस थोड़ा सा प्रश्न। इसलिए स्कैला में, यदि कोई मामला वापस नहीं लौटाता है (उदाहरण के लिए शर्त सही नहीं है), तो केस शाखाओं के ठीक बाद स्केल जारी रहेगा? – hqt

2

मैं कुछ इस तरह लिखना होगा:

def foo(x: Int) = if (x > 1) true 
        else if (x < 1) false 
        else throw new IllegalArgumentException("Got " + x) 
+1

अपवाद को फेंकना ज्यादातर स्कैला में खराब अभ्यास माना जाता है। बेहतर वापसी 'या तो [अवैध आर्ग्यूमेंट अपवाद, बूलियन] '। – Madoc

+3

क्या? क्यूं कर? किस मानक से यह बुरा अभ्यास है? https://github.com/spray/spray/search?p=6&q=throw&ref=cmdform –

0

के बाद से x == 1 के मामले अपने उदाहरण में याद आ रही है, मुझे लगता है कि यह x < 1 के रूप में सिर्फ एक ही नियंत्रित किया जाता है।

आप इस तरह यह कर सकते हैं:

def foo(x:Int):Boolean = (x - 1).signum match { 
    case 1 => true 
    case _ => false 
} 

लेकिन तब, निश्चित रूप से यह कर सकते हैं एक बहुत सरल किया जा:

def foo(x:Int) = (x - 1).signum == 1 
+5

उम, 'def foo (x: int) = x> 1' रास्ता सरल और असीमित रूप से अधिक स्पष्ट होगा। – dhg

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