2011-09-20 9 views
6

एफ # गणना अभिव्यक्ति सिंटेक्टिक चीनी की मोटी परत के पीछे मोनैडिक सिंटैक्स की जटिलता को छिपाने की अनुमति देती है। क्या स्कैला में कुछ ऐसा ही उपलब्ध है?स्कैला में हास्केल डू-नोटेशन या एफ # गणना अभिव्यक्तियों के समतुल्य?

मुझे लगता है कि यह comprehensions के लिए है ...

उदाहरण:

val f = for { 
    a <- Future(10/2) // 10/2 = 5 
    b <- Future(a + 1) // 5 + 1 = 6 
    c <- Future(a - 1) // 5 - 1 = 4 
} yield b * c   // 6 * 4 = 24 

val result = f.get 

लेकिन यह वास्तव में सही लग रहा है। क्या कोई बेहतर वाक्यविन्यास है?

हास्केल में उदाहरण के लिए यदि आप एक foreach छोरों की तरह नहीं दिखता स्केला के विपरीत

 
    main = do fromHandle <- getAndOpenFile "Copy from: " ReadMode 
      toHandle <- getAndOpenFile "Copy to: " WriteMode 
      contents <- hGetContents fromHandle 
      hPutStr toHandle contents 
      hClose toHandle 
      putStr "Done." 

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

+4

'समझ के लिए बिल्कुल सही है। वे दृश्यों के पीछे 'नक्शा' और 'फ्लैटमैप' से वंचित हैं, जो वास्तव में हैस्केल 'डू 'नोटेशन कैसे काम करता है (उन तरीकों को छोड़कर जिन्हें' एफएमएपी 'और' >> = 'हास्केल में कहा जाता है)। –

+0

@ पेलोटॉम मुझे एक ऐसा उत्तर देखना अच्छा लगेगा जो उसमें से कुछ और बताएगा। –

+5

@ डैन बर्टन - इस सवाल से कई बार पूछा गया है और उत्तर दिया गया है ... मैं आपको इस उत्कृष्ट उत्तर में देखूंगा: http://stackoverflow.com/questions/1052476/can-someone-explain-scalas-yield/1059501 # 1059501 –

उत्तर

-2

ऐसा लगता है कि स्कैला में ऐसा कोई वाक्यविन्यास उपलब्ध नहीं है और हमें संकलक प्लगइन आर्किटेक्चर का उपयोग करके इसे स्वयं लागू करने की आवश्यकता होगी।

+0

के उपयोग से 'चलो' अनुमान लगाएगा मैंने मैक्रोज़ का उपयोग करने के बारे में सोचा है-क्या आपने इसे माना है? –

4

गायब टुकड़ा शायद = के उपयोग स्केला के लिए-comprehensions की है:

val f = for { 
    a <- Future(10/2) // 10/2 = 5 
    b <- Future(a + 1) // 5 + 1 = 6 
    c <- Future(a - 1) // 5 - 1 = 4 
    d = b * c   // 6 * 4 = 24 
} yield d 


val result = f.get 

<- और = दोनों का विवेकपूर्ण मिश्रण के साथ, आप सब लचीलापन आप की जरूरत नहीं होनी चाहिए।

+1

कभी-कभी मैं चाहता हूं कि हास्केल का 'डू' सिंटैक्स '=' –