更好的|>忽略或返回()

时间:2017-06-06 15:14:20

标签: f#

所以这只是一个好奇心问题。

如果我想归还单位,这是更好的做法?

|> ignore

()

可能还有其他方法。我只想知道什么是最好的,考虑到这些:

  • 什么是最高效的
  • 生产环境的最佳做法
  • 长期维护最具可读性

2 个答案:

答案 0 :(得分:12)

我认为你正在比较这里不太可比的东西。 ()值可让您创建单位值,而|> ignore则可用于忽略其他结果。两者并不完全相同:

如果您正在调用某个函数并且想要忽略该结果,则只需编写:

doStuff () |> ignore

但对()执行相同操作会要求您忽略警告:

doStuff () // warning: Result is ignored
()

...或者您可以使用_绑定将结果分配给忽略模式let

let _ = doStuff ()
()

因此,在这种情况下,使用ignore更好 - 它是内联的,因此它没有性能影响,它导致代码更容易阅读。

也就是说,有些情况下你只需要创建一个单位值然后()就是你所需要的(并且没有明显的方式ignore会让你这样做)。例如:

match optMessage with
| Some message -> printfn "ANNOUNCEMENT: %s" message
| None -> ()

您可以将()替换为42 |> ignore以获得相同的结果,但这会很愚蠢!

答案 1 :(得分:4)

ignore是一个内联函数,因此两者都会产生完全相同的IL。

ignore更明确,因此更具可读性,这就是它存在的原因,所以你应该更喜欢它。