【发布时间】:2008-09-30 11:11:16
【问题描述】:
您发现自己最常使用这两种替代方法中的哪一种,哪一种更“惯用”?
- f arg (obj.DoStuff())
- f arg
【问题讨论】:
-
+1 因为我什至不知道
<|;)
标签: f# coding-style
您发现自己最常使用这两种替代方法中的哪一种,哪一种更“惯用”?
【问题讨论】:
<| ;)
标签: f# coding-style
总的来说,我不知道哪一个更惯用。
就个人而言,我唯一一次使用
raise <| new FooException("blah")
除此之外,我总是使用括号。请注意,由于大多数 F# 代码使用柯里化函数,这通常并不意味着任何“额外”的括号:
f arg (g x y)
当你进入非柯里化函数和构造函数之类的时候,它开始变得不那么漂亮了:
f arg (g(x,y))
我们可能至少考虑更改 F# 语言规则,以便高优先级应用程序绑定得更紧密;现在
f g()
解析像
f g ()
但很多人希望它解析为
f (g())
(原始问题中的动机案例)。如果您对此有强烈意见,请对此回复发表评论。
【讨论】:
g x)和“高优先级应用程序”(g(x),g 和 open-paren 之间没有空格),因此 f g(x) 今天永远不会编译,无论 @ 是否987654333@ 接受 1 或 2 个 curried 参数(f g (x) 将 2 个参数传递给 f,f (g(x)) 将一个参数传递给 f)。因此,未来对该语言的修订可能会“承认更多的法律程序”作为非破坏性变化。但这会非常微妙(使空格对不同的法律程序有意义),因此不太可能。
因为类型推断是从左到右进行的,所以使用|> 的好处是它允许 F# 推断函数参数的类型。
作为一个人为的例子,
[1; 2; 3] |> (fun x -> x.Length*2)
工作得很好,但是
(fun x -> x.Length*2) [1; 2; 3]
抱怨“查找不确定类型的对象”。
【讨论】:
我更频繁地使用 (),但这只是偏好,我很确定
【讨论】:
只要可能,我更喜欢 |> 因为它从左到右阅读。
【讨论】: