Estoy tratando de trabajar a través de un ejemplo en el Experto F #, que se basa en v1.9.2, pero los lanzamientos de CTP después de que han cambiado lo suficiente para que algunos de ellos ni siquiera compilar más.experto rastreador ejemplo F # Web
Tengo algunos problemas con la lista 13-13. He aquí el fragmento de la definición urlCollector
objeto:
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))
Estoy compilando con la versión 1.9.6.16 , y el compilador se queja de esta manera:
- construcción incompleta estructurada en o antes de este punto en expresión [después de la última paren]
- error en la expresión de retorno para este 'let'. Posible indentación incorrecta [se refiere a la definición de let
waitForUrl
]
¿Alguien puede detectar qué está mal aquí?
convenido ... a veces bloquean definiciones de sangrado es más oscura que útiles. He adquirido el hábito de agregar tokens de inicio/final para establecer dónde comienzan y terminan los bloques largos o profundamente anidados. No son necesarios en la sintaxis #light, pero aún están disponibles. – flatline
Gracias - Voy a intentarlo. Supongo que una cosa que fue engañosa, y muy desafortunada dada la importancia de la sangría adecuada, fue que el ejemplo en el libro abarca un salto de página, por lo que es difícil decir dónde se alinea la sangría. –
Esto se rompe de nuevo :( – Benjol