3

您发现自己最常使用这两种替代方法中的哪一种,哪种更“惯用”?

  1. f arg (obj.DoStuff())
  2. f arg <| obj.DoStuff()
4

4 回答 4

5

总的来说,我不知道其中一个更惯用。

就个人而言,我唯一一次使用 <| 与“提高”:

raise <| new FooException("blah")

除此之外,我总是使用括号。请注意,由于大多数 F# 代码使用柯里化函数,这通常并不意味着任何“额外”的括号:

f arg (g x y)

当您进入非柯里化函数和构造函数以及诸如此类的东西时,它开始变得不那么漂亮了:

f arg (g(x,y))

我们可能至少会考虑更改 F# 语言规则,以使高优先级应用程序绑定得更紧密;现在

f g()

解析像

f g ()

但很多人希望它解析为

f (g())

(原始问题中的动机案例)。如果您对此有强烈意见,请对此回复发表评论。

于 2008-09-30T13:01:02.097 回答
2

因为类型推断是从左到右进行的,所以 using 的一个好处|>是它允许 F# 推断函数参数的类型。

作为一个人为的例子,

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

工作得很好,但是

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

抱怨“查找不确定类型的对象”。

于 2008-11-18T22:57:33.583 回答
0

我更频繁地使用 (),但这只是偏好,我很确定 <| 更惯用,但我习惯使用 () 。

于 2008-09-30T11:26:49.827 回答
0

只要有可能,我更喜欢 |> 因为它从左到右读取。

于 2008-09-30T12:39:23.367 回答