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.
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:
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
:
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:
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
Tags und Links f# pattern-matching