il risultato di esecuzione (map println ...)
è una raccolta del risultato dell'esecuzione di println che è nullo. Quindi il risultato è una raccolta di (nil nil nil nil)
stampata dal REPL. mentre sta stampando, le chiamate println stampano anche l'output in REPL in modo da vedere i due mixati insieme.
se si definisce questo senza stamparlo:
user=> (def result (map println [1 2 3 4]))
#'user/result
non succede nulla inizialmente perché risultato è pigro. Se ci rendiamo conto che senza stamparlo utilizzando dorun
user=> (dorun result)
1
2
3
4
nil
vediamo gli effetti collaterali di ogni println e poi il valore di ritorno di dorun
, che è pari a zero. Possiamo quindi esaminare il contenuto del risultato, valutando lo
user=> result
(nil nil nil nil)
e vedere che restituisce un po 'di nil
s
fonte
2012-12-27 23:16:33
Informazione generale: Non usare le funzioni di effetto collaterale per operazioni mappa – Ankur