F # Le espressioni di calcolo consentono di nascondere la complessità della sintassi monadica dietro uno spesso strato di zucchero sintattico. C'è qualcosa di simile disponibile in Scala?Equivalente alla notazione Haskell o alle espressioni di calcolo F # in Scala?
penso che sia espressioni for ...
Esempio:
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
Ma non si sente veramente giusto. C'è una sintassi migliore?
per exemple in Haskell si avrebbe
main = do fromHandle <- getAndOpenFile "Copy from: " ReadMode toHandle <- getAndOpenFile "Copy to: " WriteMode contents <- hGetContents fromHandle hPutStr toHandle contents hClose toHandle putStr "Done."
questa differenza di Scala non apparire come un foreach loop. La sintassi di Scala sembra avere un accoppiamento troppo forte con la comprensione di List che è un concetto distinto. Che mi impedisce di scrivere DSL interno (monad) che non sembra strano.
'for' comprehensions ha esattamente ragione. Hanno desugar per 'map' e' flatMap' dietro le quinte, che è esattamente come funziona la notazione Haskell 'do' (eccetto quei metodi sono chiamati' fmap' e '>> =' in Haskell). –
@pelotom Mi piacerebbe vedere una risposta che spieghi un po 'di più. –
@Dan Burton - Questa domanda è stata fatta e ha risposto diverse volte ... Ti rimanderò a questa eccellente risposta: http://stackoverflow.com/questions/1052476/can-someone-explain-scalas-yield/1059501 # 1059501 –