J'ai un extracteur qui extrait un objet d'une chaîne. Si j'essaie d'utiliser cet extracteur dans une correspondance de modèle, alors tout fonctionne comme prévu.Quelle est la différence de la fonction non appliquée dans la correspondance de modèle et dans une fonction partielle?
"" match {
case ItemStructure(item) =>
}
Il fonctionne également dans une fonction de recherche de motif anonyme.
Option("").map {
case ItemStructure(item) =>
}
Maintenant, si je tente d'utiliser cet extracteur dans une fonction partielle, le compilateur échoue avec le message: ne peut pas résoudre surchargées unapply
val func: PartialFunction[Any, Unit] = {
case ItemStructure(item) =>
}
Si je renomme l'objet compagnon où la fonction unapply est situé alors tout fonctionne comme prévu.
Est-ce que quelqu'un pourrait expliquer pourquoi l'extrait ne fonctionne pas s'il se trouve dans l'objet compagnon?
Je ne pouvais pas comprendre comment le dernier exemple correspond aux deux méthodes non appliquées. Pouvez-vous également l'expliquer? – fcat
@fcat Si le type est String, 'unapply (ItemStructure)' ne peut jamais correspondre, il n'est donc pas nécessaire de le prendre en compte. Si le type est 'ItemStructure',' unapply (String) 'ne peut jamais correspondre. Si le type est 'Any', les deux peuvent correspondre car un' Any' pourrait être un 'ItemStructure' ou il pourrait être un' String'. – sepp2k
Ok, je suis aveugle pour voir que le dernier type est 'Any'. Merci pour l'explication! – fcat