F # Wyrażenia obliczeniowe pozwalają ukryć złożoność monadycznej składni za grubą warstwą cukru syntaktycznego. Czy w Scali jest coś podobnego?Odpowiednik do notacji Haskella lub Wyrażeń obliczeniowych F # w Scali?
Myślę, że to dla listowe ...
Przykład:
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
Ale to naprawdę nie czuję się dobrze. Czy istnieje lepsza składnia?
dla exemple w Haskell trzeba
main = do fromHandle <- getAndOpenFile "Copy from: " ReadMode toHandle <- getAndOpenFile "Copy to: " WriteMode contents <- hGetContents fromHandle hPutStr toHandle contents hClose toHandle putStr "Done."
ten przeciwieństwie Scala nie wyglądać jak pętla foreach. Składnia Scala wydaje się mieć zbyt silne sprzężenie ze zrozumieniem listy, co jest odrębną koncepcją. Które uniemożliwiają mi pisanie wewnętrznej DSL (monada), która nie wygląda dziwnie.
Zrozumienie "za" jest dokładnie słuszne. Przywołują one do "map" i "flatMap" za kulisami, tak właśnie działa notacja Haskell 'do' (z wyjątkiem tych metod, które są nazywane' fmap' i '>> =' w Haskell). –
@pelotom Chciałbym zobaczyć odpowiedź, która wyjaśnia nieco więcej. –
@Dan Burton - To pytanie zostało zadane i udzielono odpowiedzi kilka razy ... Przekażę Ci tę doskonałą odpowiedź: http://stackoverflow.com/questions/1052476/can-someone-explain-scalas-yield/1059501 # 1059501 –