2014-11-26 12 views
6

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 su foo 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 come inline 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.

+0

Nessun errore di compilazione per me, ma la sintassi 'problema _' sembra estremamente strana, non sono sicuro di cosa si sta tentando di fare. –

+0

@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

+0

@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

risposta

1

Questo è stato davvero un bug. L'ho segnalato ed è stato risolto il 30-01-2015 da Andrew Kennedy; see this issue report for Visual F# on Github.

Divertente effetto collaterale: il codice assurdo di questa domanda è finito come test di regressione. (È di dominio pubblico, per ogni evenienza)

Le versioni future di F # non dovrebbero più presentare questo problema. Grazie a tutti coloro che hanno contribuito a riprodurlo, analizzarlo e ripararlo!

Problemi correlati