我正在玩F#,编译器警告我如果我不使用某些结果(same problem described here)。由于F#甚至具有“忽略”功能,因此它似乎有点重要,但我不明白为什么 - 为什么C#不关心它,但F#呢?为什么F#警告我忽略结果
4
A
回答
10
C#和F#之间的一个根本区别在于F#everything is an expression(而不是混合的表达式和语句)。这包括在C风格语言中的语句,如控制流构造。
以功能性方式进行编程时,您希望可以编写一小段可以组合在一起的引用透明代码。一切都是一种表达的事实正好适用于此。另一方面,当你做某件事情给你一个价值,而你把它留在那里时,你就会反对这种思维方式。你要么做一些副作用,要么你只是在某处留下一段代码。无论是哪种情况,公平的游戏都会警告您您正在做非典型的事情。
F#不鼓励,但不会禁止副作用,并且只要中间类型的类型为unit
,就可以让序列执行(可能是副作用)表达式。这就是ignore
所做的 - 接受一个参数并返回unit
。
4
在F#中,大多数情况都是带有值的表达式。 如果你忽略了F#中一个表达式的值,或者没有绑定它或者返回它,那么感觉就像你犯了一个错误。忽略表达式的值表明您正在取决于操作的副作用,而在F#中,您应该避开副作用。
该链接正是我所期待的,谢谢:) – August 2015-01-21 18:34:08