Mi pregunta está relacionada de alguna manera con esta - Functions with generic parameter types - pero no puedo entender cómo hacer lo que quiero.F #: funciones de sobrecarga
quiero definir un 'descendientes funcionan para envolver la llamada a 'Los descendientes' en diversas clases de C#, así:
vamos descendientes nombre (XDocument: XDocument) = xDocument.Descendants nombrar
vamos descendientes name (xElement: XElement) = xElement.Descendants name
Este enfoque no funciona porque tenemos una definición duplicada de 'descendientes'.
pensé que sería posible hacer uso de la función en línea y de forma estática resolver los parámetros para definir el siguiente método para hacer esto en su lugar:
let inline descendants name (xml : ^x when ^x : (member Descendants : XName -> seq<XElement>)) =
xml.Descendants name
Pero estoy recibiendo este error al intentar hacer eso :
Búsqueda en el objeto de tipo indeterminado según la información anterior a este punto del programa. Es posible que se necesite una anotación tipo antes de este punto del programa para restringir el tipo del objeto. Esto puede permitir que la búsqueda se resuelva.
¿Hay alguna forma de que pueda escribir esa segunda función para hacer lo que quiero?
¡Ah, no me di cuenta de que la sobrecarga solo funcionaba para los miembros en realidad, obviamente no leí la otra publicación lo suficiente! Tampoco entendí que ambos heredaron de XContainer así que gracias, esa es una solución mucho mejor. –
Probé la sobrecarga normal en realidad y el compilador dice que hay 2 miembros llamados 'Descendientes' con el mismo número de argumentos –
En algún momento anterior versiones, el compilador F # requirió '[]' para usar cuando se sobrecarga, pero no estoy seguro de en qué versión esto fue eliminado ... Intenté con un ejemplo más simple en F # RC (dos métodos , ambos con dos argumentos) y funcionó bien (sin 'OverloadID'). –