你更常使用哪种方式,哪一种更符合“惯用语”?
- f arg (obj.DoStuff())
- f arg <| obj.DoStuff()
你更常使用哪种方式,哪一种更符合“惯用语”?
总的来说,我不知道哪个更符合惯用语。
个人而言,我只有在使用"raise"时才使用<|。
raise <| new FooException("blah")
f arg (g x y)
当你涉及到非柯里化函数、构造函数等等时,代码就变得不那么美观了:
f arg (g(x,y))
我们可能会至少考虑改变F#语言规则,使高优先级应用程序绑定更紧密;目前
f g()
f g ()
f (g())
g x
)和“高优先级应用程序”(g(x)
,括号内没有空格),因此无论 f
接受 1 个还是 2 个柯里化参数,f g(x)
今天都不会编译通过(f g (x)
将 2 个参数传递给 f
,而 f (g(x))
则将一个参数传递给 f
)。因此,未来版本的语言可以“允许更多合法程序”作为非破坏性更改。但这将非常微妙(使空格对不同的合法程序具有意义),因此不太可能发生。 - Brian|>
的另一个好处是它允许F#推断函数参数的类型。[1; 2; 3] |> (fun x -> x.Length*2)
功能正常,但
(fun x -> x.Length*2) [1; 2; 3]
抱怨“在不确定类型的对象上查找”。
我经常使用 (),但那只是个人喜好,我相信 <| 更符合惯用语法,但我出于习惯使用 ()。
<|
;) - Dario