为什么 F# 警告我忽略结果
Why does F# warn me for ignoring a result
我正在玩 F#,如果我不使用某些结果,编译器会警告我 (same problem described here)。由于 F# 甚至具有函数 "Ignore",因此它似乎有些重要,但我真的不明白为什么 - 为什么 C# 不关心它,但 F# 关心它?
在 F# 中,几乎所有内容都是具有值的表达式。
如果您通过未能绑定表达式或 return 它而忽略了 F# 中表达式的值,那么感觉就像您在犯错误。忽略表达式的值表明您依赖于操作的副作用,而在 F# 中您应该避免副作用。
C# 和 F# 的一个根本区别在于 F# everything is an expression(与表达式和语句的混合不同)。这包括 C 风格语言中的语句,如控制流结构。
以函数式方式编程时,您希望拥有可以组合在一起的小块引用透明代码。事实上,一切都是一种表达方式。
另一方面,当你做一些能给你带来价值的事情,而你只是把它留在那儿时,你就违背了这种心态。您要么是为了一些副作用而这样做,要么只是在某处有一段遗留代码。在任何一种情况下,警告您您正在做一些非典型的事情都是公平的游戏。
F# 不鼓励,但并不禁止副作用,并允许您按顺序执行(可能产生副作用的)表达式,只要中间表达式的类型为 unit
。这就是 ignore
所做的 - 接受一个参数并且 returns unit
.
我正在玩 F#,如果我不使用某些结果,编译器会警告我 (same problem described here)。由于 F# 甚至具有函数 "Ignore",因此它似乎有些重要,但我真的不明白为什么 - 为什么 C# 不关心它,但 F# 关心它?
在 F# 中,几乎所有内容都是具有值的表达式。 如果您通过未能绑定表达式或 return 它而忽略了 F# 中表达式的值,那么感觉就像您在犯错误。忽略表达式的值表明您依赖于操作的副作用,而在 F# 中您应该避免副作用。
C# 和 F# 的一个根本区别在于 F# everything is an expression(与表达式和语句的混合不同)。这包括 C 风格语言中的语句,如控制流结构。
以函数式方式编程时,您希望拥有可以组合在一起的小块引用透明代码。事实上,一切都是一种表达方式。
另一方面,当你做一些能给你带来价值的事情,而你只是把它留在那儿时,你就违背了这种心态。您要么是为了一些副作用而这样做,要么只是在某处有一段遗留代码。在任何一种情况下,警告您您正在做一些非典型的事情都是公平的游戏。
F# 不鼓励,但并不禁止副作用,并允许您按顺序执行(可能产生副作用的)表达式,只要中间表达式的类型为 unit
。这就是 ignore
所做的 - 接受一个参数并且 returns unit
.