2015-01-20 2 views
4

Я играю с F #, и компилятор предупреждает меня, если я не использую какой-либо результат (same problem described here). Поскольку F # даже имеет функцию «Игнорировать» для этого, кажется, что это несколько важно, но я действительно не понимаю, почему - почему C# не заботится об этом, но F # делает?Почему F # предупреждает меня о игнорировании результата

ответ

10

Одно фундаментальное различие между C# и F # заключается в том, что в F # everything is an expression (в отличие от сочетания выражений и утверждений). Это включает в себя вещи, которые в языках C-стиля являются операциями, такими как конструкции потока управления.

При программировании функциональным способом вы хотите иметь небольшие кусочки ссылочно прозрачного кода, который вы можете составить вместе. Тот факт, что все это выражение, прямо в этом.

С другой стороны, когда вы делаете что-то, что дает вам значение, и вы просто оставляете его там, вы идете против этого мышления. Вы либо делаете это для какого-то побочного эффекта, либо у вас просто есть кусок кода с кодом. В любом случае это честная игра, чтобы предупредить вас, что вы делаете что-то нетипичное.

F # обескураживает, но не запрещает побочные эффекты и позволяет иметь (потенциально побочные эффекты) выражения, выполняемые в последовательности, если промежуточные имеют тип unit. И это то, что делает ignore - принимает аргумент и возвращает unit.

+0

Эта ссылка была именно тем, что я искал, спасибо :) – August

4

В F #, большинство из них - это выражение со значением. Если вы пренебрегаете значением выражения в F #, либо не связывая его, либо возвращая его, значит, вы ошибаетесь. Игнорирование значения выражения указывает на то, что вы зависите от побочного эффекта операции, а в F # вы должны избегать побочных эффектов.

Смежные вопросы