Beim Versuch, mehr Anfragen in F # über LinqPad zu schreiben, stieß ich auf eine interessante Sache mit der WHERE-Klausel.Warum sind in F # Klammern erforderlich, wenn die Ausdruckswordklausel der Methode gekettet wird?
let dc = new TypedDataContext()
let q = query {
for o in dc.OrderItem do
where (o.Description.Contains("spam"))
select o
}
q |> Dump
Wenn ich die Klammer um o.Description.Contains("spam")
entfernen erhalte ich die oft unten gesehen Fehlermeldung.
Aufeinander folgende Argumente durch Leerzeichen oder fach vervielfachen getrennt werden sollen, und Argumente Funktion oder Methode Anwendungen, bei denen sollen (mit externer F # -Compiler)
Wenn ich diesen Fehler sehe ich normalerweise klammerten werden erkennen, dass ich bin Ich gebe nicht genug Informationen, damit der Compiler versteht, dass ich versuche, das Ergebnis eines früheren Methodenaufrufs oder einer Eigenschaft abzurufen oder einen Zugriff auf den Aufruf auszuführen, aber in diesem Fall ist es mir unklar. Außerdem wäre ich neugierig, ob es eine idiomatischere Art gibt, die Bedingungen des Compilers zu erfüllen, ohne um den Ausdruck herumkommen zu müssen, um sowohl offene als auch schließende Klammern hinzuzufügen.