¿Cuál es la causa de este tipo de error?
Dos preguntas:
¿Por qué este código no se compila? yocreer (pero no estoy 100% seguro, es posible que haya cometido un error) de que es de tipo correcto.
Que quiere decir el mensaje de error? Estoy confundido por qué el tipo de argumento esperado es_ -> _
(o tal vez simplemente no sé qué significa_ -> _
en este caso). El objetivo de esta pregunta es aprender a diagnosticar correctamente este mensaje de error, en caso de que vuelva a encontrarlo en el futuro.
El código:
Este código no se compila con el mensaje de error "No se puede convertir el valor del tipo 'A -> B' al tipo de argumento esperado '_ -> _':
class ZipList<A> {
let xs: [A]
init(xs: [A]) {
self.xs = xs
}
func map<B>(f: A -> B) -> ZipList<B> {
return ZipList(xs: self.xs.map(f))
}
}
Información Adicional:
Al principio, asumí que el problema era con la inferencia de tipos, así que intenté escribir los tipos explícitamente, pero eso también falló:
Sin embargo, esto se compila muy bien (la única diferencia con mi originalmap
la versión es la<B>
pasado a laZipList
inicializador):
func map4<B>(f: A -> B) -> ZipList<B> {
return ZipList<B>(xs: self.xs.map(f))
}