La mia domanda è in qualche modo correlata a questo - Functions with generic parameter types - ma non riesco a capire come fare ciò che voglio.F #: funzioni di sovraccarico
voglio definire un 'discendenti funzione per avvolgere la chiamata a 'discendenti' su varie classi C# in questo modo:
diamo nome discendenti (XDocument: XDocument) = xDocument.Descendants citarne
lasciare discendenti name (xElement: XElement) = xElement.Descendants name
Questo approccio non funziona perché abbiamo una definizione duplicata di "discendenti".
ho pensato che sarebbe stato possibile fare uso della funzione inline e staticamente risolvere i parametri per definire il seguente metodo per fare questo, invece:
let inline descendants name (xml : ^x when ^x : (member Descendants : XName -> seq<XElement>)) =
xml.Descendants name
Ma sto ottenendo questo errore quando si cerca di farlo :
Ricerca su oggetto di tipo indeterminato basato su informazioni precedenti a questo punto programma. Potrebbe essere necessaria un'annotazione di tipo prima di questo punto del programma per vincolare il tipo dell'oggetto. Ciò potrebbe consentire la risoluzione della ricerca.
C'è un modo in cui posso scrivere quella seconda funzione per fare ciò che voglio?
Ah Non mi sono reso conto che l'overloading ha funzionato solo per i membri in realtà, ovviamente non ho letto l'altro post abbastanza da vicino! Inoltre non ho capito che entrambi hanno ereditato da XContainer quindi grazie, è una soluzione molto migliore –
Ho provato il normale sovraccarico e il compilatore dice che ci sono 2 membri chiamati "Discendenti" con lo stesso numero di argomenti –
In alcuni precedenti versioni, compilatore F # richiesto '[]' da utilizzare durante il sovraccarico, ma non sono sicuro di quale versione sia stata rimossa anche se ... Ho appena provato un esempio più semplice in F # RC (due metodi , entrambi con due argomenti) e ha funzionato correttamente (senza 'OverloadID'). –