Я играю с F #, и компилятор предупреждает меня, если я не использую какой-либо результат (same problem described here). Поскольку F # даже имеет функцию «Игнорировать» для этого, кажется, что это несколько важно, но я действительно не понимаю, почему - почему C# не заботится об этом, но F # делает?Почему F # предупреждает меня о игнорировании результата
ответ
Одно фундаментальное различие между C# и F # заключается в том, что в F # everything is an expression (в отличие от сочетания выражений и утверждений). Это включает в себя вещи, которые в языках C-стиля являются операциями, такими как конструкции потока управления.
При программировании функциональным способом вы хотите иметь небольшие кусочки ссылочно прозрачного кода, который вы можете составить вместе. Тот факт, что все это выражение, прямо в этом.
С другой стороны, когда вы делаете что-то, что дает вам значение, и вы просто оставляете его там, вы идете против этого мышления. Вы либо делаете это для какого-то побочного эффекта, либо у вас просто есть кусок кода с кодом. В любом случае это честная игра, чтобы предупредить вас, что вы делаете что-то нетипичное.
F # обескураживает, но не запрещает побочные эффекты и позволяет иметь (потенциально побочные эффекты) выражения, выполняемые в последовательности, если промежуточные имеют тип unit
. И это то, что делает ignore
- принимает аргумент и возвращает unit
.
В F #, большинство из них - это выражение со значением. Если вы пренебрегаете значением выражения в F #, либо не связывая его, либо возвращая его, значит, вы ошибаетесь. Игнорирование значения выражения указывает на то, что вы зависите от побочного эффекта операции, а в F # вы должны избегать побочных эффектов.
- 1. Почему Eclipse предупреждает меня о добавлении serialVersionUID?
- 2. Почему Netbeans предупреждает меня о завершении?
- 3. Почему Скалатра предупреждает меня о log4j
- 4. Почему STS предупреждает меня о несоответствующих параметрах?
- 5. Почему ртуть предупреждает меня о расходящихся переименованиях?
- 6. Почему именно regasm предупреждает меня о подписании с сильным именем?
- 7. Почему numpy-C api не предупреждает меня о неудачных распределениях?
- 8. Почему React предупреждает меня о привязке метода компонента к объекту?
- 9. Почему CodeRush предупреждает меня о неиспользованной декларации в коде?
- 10. Командная строка предупреждает меня о команде
- 11. Почему Perl предупреждает меня об использовании псевдохешей?
- 12. Почему rm -f спрашивает меня о подтверждении на zsh?
- 13. jQuery - Почему это предупреждает о нежелательных вещах?
- 14. Почему php-fpm предупреждает ребёнка о воспалении?
- 15. Почему ИДЕЯ предупреждает о возвращении Будущего Нет?
- 16. Eclipse предупреждает меня, что у меня есть
- 17. я не могу видеть конфликты, GitHub предупреждает меня о
- 18. Как я могу узнать, о каких предупреждениях меня предупреждает Proguard?
- 19. Почему Visual Studio предупреждает меня, что рекомендуются разрешения администратора?
- 20. Предупреждение о неавтомобиле не предупреждает
- 21. После компиляции не появилось предупреждение, почему оно меня предупреждает?
- 22. Почему компилятор не предупреждает меня об очевидной ошибке?
- 23. Почему Эликсир предупреждает меня, что мой импорт не используется?
- 24. Почему git предупреждает меня, что моя ветка расходится с хозяином?
- 25. JSLint предупреждает о тройном операторе
- 26. Почему GCC предупреждает меня о бесполезном использовании при использовании унаследованного конструктора?
- 27. Почему компилятор все еще предупреждает меня о небезопасных strtok даже после того, как я определяю _CRT_SECURE_NO_WARNINGS?
- 28. Почему компилятор Xcode не предупреждает меня о недействительных методах для моей цели развертывания?
- 29. Почему nvlink предупреждает меня о недостатке кода объекта sm_20 (вычислительный потенциал 2.0)?
- 30. Почему не общий NSDictionary предупреждает меня о неверно введенных вводах клавиш/назначениях?
Эта ссылка была именно тем, что я искал, спасибо :) – August