F # "Diese Regel wird niemals abgeglichen" Ausdruck in einer NICHT rekursiven Funktion

8

Ich habe eine solche Funktion:

%Vor%

Ich habe ein Problem "Diese Regel wird niemals gefunden werden" in meinen Fällen "'Oberes Gesicht', 'Linkes Gesicht', 'Vorderseite', 'Rechte Seite', 'Rückseite', 'Unterseite' und '_'."

Ich habe diesen Link gesucht;

f # match Ausdruck - "Regel wird nie gefunden"

Aber um ehrlich zu sein habe ich nicht verstanden, was ich mit meinem Fall anfangen soll.

    
yusuf 29.12.2014, 20:29
quelle

2 Antworten

8

Sie können nicht mit einer Variablen übereinstimmen, ich meine Sie können, aber wenn Sie das tun, was passieren würde ist, dass die Variable an diesen Wert gebunden wird und es scheint mir, dass das nicht das ist, was Sie versuchen zu tun, sonst die Der erste Fall in Ihrem Code wird alle anderen Fälle "essen" und deshalb werden die folgenden Regeln niemals erfüllt.

Sie können entweder mit einer Bedingung übereinstimmen:

%Vor%

oder deklarieren Sie upperface und die anderen Variablen als Konstanten, indem Sie das Literalattribut verwenden:

%Vor%     
Gustavo 29.12.2014, 20:51
quelle
3

Technisch ist Gustavos Antwort die richtige Antwort auf die Frage und zeigt einige nette Details zum Mustervergleich. In Ihrem Fall sollten Sie jedoch, anstatt mit Ganzzahlen zu vergleichen, mit Fälle von diskriminierter Gewerkschaft .

Mit anderen Worten, die Variable face könnte den Typ Face anstelle von int :

haben %Vor%

Das Attribut RequireQualifiedAccess bedeutet, dass Sie Face.Front anstatt nur Front schreiben müssen. Sie können es weglassen, wenn die Fälle nie etwas anderes bedeuten. Mit der obigen Definition wird RotateFace zu:

%Vor%

Auf diese Weise brauchen Sie auch nicht den _ -> () case, weil der Compiler weiß, dass Ihre Musterübereinstimmung alle Flächen behandelt.

Ohhhhhh! Sie bauen einen 3x3x3 Rubick's Cube Solver mit Lego Mindstorms und F #! Endlich sehe ich, was diese Fragen verbindet. : D

    
Vandroiy 30.12.2014 15:50
quelle

Tags und Links