2008-09-30 11 views

答えて

5

全体的に、私はどちらか一方がもっと慣用的であるかどうかはわかりません。

個人的には、私が使用する唯一の時間< |

raise <| new FooException("blah") 

私は常に括弧を使用しています。

f arg (g x y) 

あなたは非カリー化関数とコンストラクタに入ると、それはあまりきれいになっ始まりその他もろもろというときにです:

最もF#コードは、カリー化関数を使用するので、これは典型的には、任意の「余分な」括弧を意味するものではないことに注意してください
f arg (g(x,y)) 

我々は、おそらく、少なくともは、高優先順位のアプリケーションは、より緊密に結合するようは、F#言語規則の変更を検討します。今

f g() 

f g() 

のように解析しますが、多くの人々は、それが

f (g()) 

(元の質問でやる気の場合)として解析したいと思います。これについて強い意見がある場合は、この回答にコメントを残してください。

+0

FSHubでこれと次のスレッドを読むと http://cs.hubfs.net/forums/thread/3665.aspx http://cs.hubfs.net/forums/thread/5421.aspx 私は私がペンを見つけるとすぐに「f(g)()」のような「fs()」のようなパースをしましょう! これを「固定」すると、フレームワークを非常にきれいにすることができます。 –

+0

フレームワークからのメソッド呼び出しをより自然に使うために、f()()のようなf()を解析してみたいと思います。しかし、私はすでに生産リリースがあると考えて、遅すぎるのではないかと心配しています... –

+0

実際にはまだ変更が可能です。 'g'と' open-paren 'との間にスペースを入れずに'アプリケーション '( 'gx')と'優先順位の高いアプリケーション'( 'g(x)')を区別するので 'fg(x)'は決してコンパイルされません(fg(x))が2つの引数をfに渡し、f(g(x))が1つの引数をfに渡すかどうかにかかわらず)。それで、将来の改訂版の言語が「法的プログラムを認めて」、それは改正されない変化である可能性があります。しかし、それは非常に微妙なもので(微妙な法的プログラムには意味のある空白を作っています)、そんなことはありません。 – Brian

0

私は(もっと)頻繁に使用しますが、それはちょっと好みです、私はかなり確信しています。< |もっと怠け者ですが、私は習慣で()を使います。

+0

レイン、私は最近のF#を完全に理解し始めました。あなたは商業的な開発に使うのか、ただ楽しみのために使うのですか?私は実際のF#アプリに非常に興味を持っています – aku

+0

ちょうど今楽しかったですが、実際のアプリには非常に適していますが、この言語は美しいです。これは、C#がエレガントで読みやすいコードをもっと尊重することができる同じ程度までほとんど使用することができます! – Rayne

+0

Rayne、同意します。私は本当にそれが好き。彼らはすぐに私たちにRTM版をすぐにもらうことを願っています – aku

0

いつでも、私は左から右に読むために|>を好むでしょう。

2

型推論は左から右に作用するので、|>を使用すると、F#が関数の引数の型を推論できるようになります。不自然な例として

[1; 2; 3] |> (fun x -> x.Length*2) 

うまく動作しますが、

(fun x -> x.Length*2) [1; 2; 3] 

は "不確定型のオブジェクトの参照" を訴えます。私も< `知りませんでした

関連する問題