我正在玩F#,如果我不使用某些结果(same problem described here),编译器会发出警告。因为F#甚至具有“忽略”功能,所以它似乎有点重要,但我真的不明白为什么 - 为什么C#不关心它,但是F#呢?
答案 0 :(得分:10)
C#和F#之间的一个根本区别在于F#everything is an expression(而不是表达式和语句的混合)。这包括C风格语言中的语句,如控制流结构。
以功能方式编程时,您希望将可以组合在一起的小部分引用透明代码。一切都是表达的事实正好适用于此。
另一方面,当你做一些给你一个价值的东西,而你只是把它放在那里时,你就会反对这种心态。你要么是为了一些副作用,要么只是在某个地方有一段遗留代码。在任何一种情况下,公平的游戏都会警告你,你正在做一些不典型的事情。
F#不鼓励,但不会禁止副作用,并且只要中间类型为unit
类型,就会让您在序列中执行(可能会产生副作用)表达式。这就是ignore
的作用 - 接受一个参数并返回unit
。
答案 1 :(得分:4)
在F#中,大多数都是带有值的表达式。 如果你忽略了F#中的表达式的值,或者没有绑定它或者将它返回,那么感觉就像你犯了一个错误。忽略表达式的值表明你依赖于操作的副作用,而在F#中你应该避免副作用。