Sto cercando di lavorare attraverso un esempio in Expert F #, che si basa su v1.9.2, ma le versioni CTP, dopo che hanno cambiato abbastanza che alcuni di loro non hanno nemmeno compilare più.Expert F # esempio web crawler
Sono in difficoltà con l'elenco 13-13. Ecco il frammento di definizione urlCollector
oggetto:
let urlCollector =
MailboxProcessor.Start(fun self ->
let rec waitForUrl (visited : Set<string>) =
async { if visited.Count < limit then
let! url = self.Receive()
if not (visited.Contains(url)) then
do! Async.Start
(async { let! links = collectLinks url
for link in links do
do self <-- link })
return! waitForUrl(visited.Add(url)) }
waitForUrl(Set.Empty))
Sto compilando con la versione 1.9.6.16 , e il compilatore si lamenta così:
- costrutto incompleta strutturato in corrispondenza o prima di questo punto in espressione [dopo l'ultimo paren]
- errore nell'espressione di ritorno per questo 'let'. Possibile indentazione errata [si riferisce alla definizione let di
waitForUrl
]
Qualcuno può vedere cosa sta succedendo qui?
D'accordo ... a volte blocco di definizione da rientro è più oscura che utile. Ho preso l'abitudine di aggiungere i token di inizio/fine per avviare l'inizio e la fine di blocchi lunghi o profondamente annidati. Non sono richiesti nella sintassi #light ma sono ancora disponibili. – flatline
Grazie - Farò una prova. Immagino che una cosa che è stata fuorviante, e la cosa più sfortunata data l'importanza di una corretta indentazione, è che l'esempio nel libro si estende su un'interruzione di pagina, quindi è difficile dire dove si allinea la rientranza. –
Questo è stato interrotto di nuovo :( – Benjol