2012-09-22 23 views
39

मैंने Google खोज की कोशिश की और forall उदाहरण सभ्य नहीं मिला। यह क्या करता है? यह एक बूलियन समारोह क्यों लेता है?स्केल के लिए उदाहरण उदाहरण?

कृपया मुझे एक संदर्भ (स्कालाडोक को छोड़कर) पर इंगित करें।

+6

http://www.scala-lang.org/api/current/scala/collection/immutable/List.html: 'टेस्ट चाहे इस सूची के सभी तत्वों के लिए एक अनुमान है।' – MikkoP

+1

शायद आप उलझन में हैं क्योंकि आपने सोचा था इसके बजाय 'foreach' की कार्यक्षमता (सभी तत्वों के माध्यम से पुनरावृत्त) –

+1

हाँ मैं इसे foreach का एक समानांतर संस्करण सोच रहा था। – Jus12

उत्तर

64

forall विधि एक फ़ंक्शन p लेता है जो एक बूलियन लौटाता है। forall का अर्थशास्त्र कहता है: संग्रह में x के लिए true वापस करें, p(x) सत्य है।

तो:

List(1,2,3).forall(x => x < 3) 

का अर्थ है: true यदि 1, 2, और 3 कम से कम 3, false अन्यथा कर रहे हैं। इस मामले में, यह false करने का मूल्यांकन करेंगे क्योंकि यह मामला सभी तत्व हैं 3 से कम नहीं है: 3 3.

से कम नहीं वहाँ एक समान विधि exists कि true रिटर्न अगर वहाँ कम से कम एक है संग्रह में x जैसे p(x) सत्य है।

तो:

List(1,2,3).exists(x => x < 3) 

का अर्थ है: true अगर 1, 2, और 3 में से किसी एक से भी कम समय 3, false अन्यथा है। इस मामले में, यह true का मूल्यांकन करेगा क्योंकि यह मामला 3 से कम है: उदा। 1 3 से कम है

+2

तो 'फोल (foo) '' foldLeft (true) ((x, y) => x और foo (y)) के बराबर है) ' – Jus12

+5

@ Jus12, हां, सुधार के साथ यह' &&' का उपयोग करता है क्योंकि यह करता है शॉर्ट-सर्किट मूल्यांकन (यदि यह 'झूठा' पाता है तो यह 'foo' का मूल्यांकन करना बंद कर देता है)। – dhg

3

Scala स्क्रिप्ट का उपयोग करके आप इस फ़ंक्शन के साथ कैसे खेल सकते हैं इसका एक त्वरित उदाहरण।

println(args.forall(p => (p.equals("a")))) 

के साथ एक myScript.scala फ़ाइल बनाने और

scala myScript.scala a a a // true 
scala myScript.scala a b c // false 
+4

क्यों आरईपीएल का उपयोग नहीं करते? –

0

भी अच्छा से कॉल करने की याद रखना होगा कि अपने बंद करने के भीतर आप निष्पादित कर सकते हैं और अधिक आदेशों गुंजाइश चर से बाहर बताए जैसे

def main(args: Array[String]){ 
var country = "" 
var environment = "" 

val isValid = args.sliding(2, 2).forall{ 
    case Array("--env", value : String) => { 
    environment = value 
    Array("test", "staging", "prod").contains(value.toLowerCase()) 
    } 
    case Array("--country", value : String) => { 
    country = value 
    Array("BE", "NL", "FR").contains(value.toLowerCase()) 
    } 
    case _ => false 
} 

if(!isValid){ 
    println ("Wrong usage. Please insert params in the following format: --country {NL,BE,UK,FR} --env {test, staging, prod}") 
    return 
} 
else 
    println (s"Correct usage. env=$environment country=$country") 

}

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