2017-02-10 5 views
3

F#でLinqPadを使ってより多くのクエリを書き込もうとしていますが、where句で面白いことが起こりました。F#で括弧が必要なのは、メソッド連鎖のクエリ式where clause?

let dc = new TypedDataContext() 

let q = query { 
    for o in dc.OrderItem do 
    where (o.Description.Contains("spam")) 
    select o 
} 

q |> Dump 

o.Description.Contains("spam")のかっこを削除すると、以下のようなエラーメッセージが頻繁に表示されます。 (外部F#コンパイラを使用して)

連続引数をスペースで区切ったりtupled、および関数やメソッドのアプリケーションを含む引数は括弧する必要がありますする必要があります

私はこのエラーを見たとき、私は通常、私はことを実現コンパイラが先のメソッド呼び出しやプロパティの結果を連鎖しようとしていることを理解するのに十分な情報を与えていないのですが、この場合は私には不明です。さらに、開かれた括弧と閉じ括弧の両方を追加するための式を使わなくても、コンパイラの条件を満たすより慣れ親しんだ方法があれば、私は興味があります。

答えて

7

あなたはこのようなものでした場合は、同じ結果を参照してくださいね。

let f x = 1 

f o.Description.Contains("spam") 

をメッセージが示すように、あなたが引数として(この場合はContains)メソッド呼び出しの結果を使用している場合、メソッド呼び出しをカッコで囲む必要があります。 whereが真の関数ではなくクエリ演算子であっても、同じ結果が適用されます。

関連する問題