Sto correndo nell'errore del compilatore "Numero errato di argomenti tipo alla chiamata locale" quando si utilizzano tipi personalizzati con argomenti di tipo unità di misura e io non capisci perchéErrore del compilatore "Numero errato di argomenti di tipo alla chiamata locale"
Questa domanda ha subito alcune modifiche. Sembra probabile ora che l'errore sia causato da un bug del compilatore o IDE.
ho potuto restringere il campo al seguente (leggere i seguenti punti quando si cerca di riprodurre):
type R<[<Measure>] 'u> (f : float<'u>) =
member r.Member = f
let get (r : R<_>) = r.Member
let foo =
let problem _ = List.map get
problem // Error: Incorrect number of type arguments to local call
L'ultima riga dà l'errore, che è particolarmente strano, dal momento che non fa nulla più che restituire un identificatore già definito. Sto compilando una libreria o un eseguibile. Alcune osservazioni importanti per la riproduzione
IntelliSense fa non prevedere questo errore. È necessaria una compilazione reale per vederlo.
Non ho ancora visto l'errore durante la compilazione con l'ottimizzazione. (Per la riproduzione, usa ad es. La compilazione di debug predefinita in Visual Studio. Grazie a zapu su Freenode per indicarlo.)
Non ho ancora visto l'errore in F # interattivo.
La rimozione del parametro inutile di
problem
(_
) fa scomparire l'errore.Lo spostamento del let-binding di
problem
sufoo
fa scomparire l'errore. Potrebbe essere correlato alla compilazione come funzione F #? Ho sentito che questo è indicato da parentesi aggiuntive attorno al tipo diproblem
.La rimozione dell'utilizzo dell'unità di misura fa scomparire l'errore.
La marcatura
problem
comeinline
fa scomparire l'errore.
Un sacco di modifiche apparentemente irrilevanti rimuovono l'errore. Ma non è così facile nel caso d'uso effettivo, specialmente quando non so se una modifica corregge l'errore prima di provarlo.
Sarei felice di qualsiasi suggerimento su questo. Cosa lo causa? È un bug, e se è così, è noto? Come può essere evitato?
Versioni Questo è stato testato con le versioni da 3.0 a 3.1.2 di F #. Ho installato la nuova edizione della Community di Visual Studio 2013 e testato con la versione fornita, con lo stesso risultato. Si verifica anche in Visual Studio 2012 (F # 3.0).
Update: Ho chiesto ad altri di provare questo, e il comportamento spesso può essere riprodotta in Visual Studio 2012 o 2013.
Nessun errore di compilazione per me, ma la sintassi 'problema _' sembra estremamente strana, non sono sicuro di cosa si sta tentando di fare. –
@JohnPalmer Stavo solo cercando di riprodurre l'errore senza copiare il codice molto più grande che lo causa in produzione, e questo era il risultato. Ho rimosso la menzione della versione 3.1.1. dalla domanda però; Potrei aver usato inconsapevolmente il compilatore 3.0. Sto cercando di capire cosa sta succedendo in questo momento, e aggiornerò la domanda se scoprirò qualcosa. Forse sono follemente incappato in un bug già risolto. – Vandroiy
@JohnPalmer Ora sto provando su una versione di Visual Studio 2013 Community Edition appena installata, probabilmente l'attuale configurazione standard, e ancora avendo il problema. Potresti per favore dire cosa hai usato esattamente? Hai ascoltato ognuno dei punti per la riproduzione? – Vandroiy