【问题标题】:F# style - prefer () or <|F# 风格 - 首选 () 或 <|
【发布时间】:2008-09-30 11:11:16
【问题描述】:

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

  1. f arg (obj.DoStuff())
  2. f arg

【问题讨论】:

  • +1 因为我什至不知道&lt;| ;)

标签: f# coding-style


【解决方案1】:

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

就个人而言,我唯一一次使用

raise <| new FooException("blah")

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

f arg (g x y)

当你进入非柯里化函数和构造函数之类的时候,它开始变得不那么漂亮了:

f arg (g(x,y))

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

f g()

解析像

f g ()

但很多人希望它解析为

f (g())

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

【讨论】:

  • 在阅读了这个和 FSHub cs.hubfs.net/forums/thread/3665.aspx cs.hubfs.net/forums/thread/5421.aspx 上的以下主题之后,我将签署“make f g() parse like f (g())”请愿书,只要我能找到一个笔! “修复”这将使框架的使用变得更加漂亮。
  • 我还希望看到 f g() 像 f (g()) 一样解析,以便更自然地使用框架中的方法调用。但是,考虑到我们已经发布了生产版本,我担心现在为时已晚...
  • 其实还是可以改的;该语言区分“应用程序”(g x)和“高优先级应用程序”(g(x)g 和 open-paren 之间没有空格),因此 f g(x) 今天永远不会编译,无论 @ 是否987654333@ 接受 1 或 2 个 curried 参数(f g (x) 将 2 个参数传递给 ff (g(x)) 将一个参数传递给 f)。因此,未来对该语言的修订可能会“承认更多的法律程序”作为非破坏性变化。但这会非常微妙(使空格对不同的法律程序有意义),因此不太可能。
【解决方案2】:

因为类型推断是从左到右进行的,所以使用|&gt; 的好处是它允许 F# 推断函数参数的类型。

作为一个人为的例子,

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

工作得很好,但是

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

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

【讨论】:

    【解决方案3】:

    我更频繁地使用 (),但这只是偏好,我很确定

    【讨论】:

    • Rayne,我最近开始接触 F#。你将它用于商业开发还是只是为了好玩?我对现实世界的 F# 应用程序非常感兴趣
    • 现在只是为了好玩,但它非常适合现实世界的应用程序,这种语言很漂亮。它几乎可以在相同程度上使用 C# 只能更简洁优雅和可读的代码!
    • 雷恩,同意。我很喜欢。我希望他们能尽快为我们提供 RTM 版本。
    • 我用它来自动化性能测试并在工作中编写实用程序和脚本。希望它会受到关注。
    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 2011-02-27
      • 1970-01-01
      • 2011-02-17
      • 1970-01-01
      • 1970-01-01
      • 2011-11-19
      • 1970-01-01
      • 2010-09-05
      • 2019-11-22
      相关资源
      最近更新 更多