2016-10-31 5 views
1

Ich habe mehrmals den Ausdruck anArray.[i] verwendet, um auf ein Element aus einem Array zuzugreifen.F # Zugriff Array ith Element Funktion Fehler

aber plötzlich, wenn ich versuche, eine sehr sehr einfache Funktion zu machen, dann bekomme ich einen Fehler.

let safeIndexIf anArray i = 
    anArray.[i] 

Ich brauche eine Funktion zu machen, die das i-te Element des Arrays zurück, so dachte ich, das war leicht gefallen, aber keine ...

Der Fehler:

Operator ‚expr. [idx] wurde für ein Objekt des unbestimmten Typs basierend auf Informationen vor diesem Programmpunkt verwendet. Erwägen Sie das Hinzufügen weiterer Typenbeschränkungen

Warum funktioniert das nicht? Ich weiß nicht, was der Fehler damit meint. Alles was ich weiß, habe ich so oft gemacht, um auf ein Element von einem Array zuzugreifen, also warum kann ich dieses Mal nicht?

Antwort

7

Es bedeutet, die Compiler-Typ-Inferenz kann nicht feststellen, dass anArray tatsächlich ein Array ist.

Die Fehlermeldung schlägt Ihnen eine Art Anmerkung hinzufügen, könnten Sie etwas tun ein generisches Array zu sagen, dass anArray ist:

let safeIndexIf (anArray : array<'a>) i = 
    anArray.[i] 

Wenn Sie Typenannotationen vermeiden wollen Sie Ihre Funktion Umschreiben könnten versuchen, zu verwenden Array.item, die das gleiche Verhalten hat:

let safeIndexIf anArray i = 
    Array.item i anArray 
+0

Vielen Dank. Das macht Sinn – Nulle