В качестве ответа на ответ Тима я подумал, что вы могли бы по достоинству оценить дальнейшее понимание того, на что вы наткнулись.В вашем примере ExeC и ExeA используют функциональный стиль организации кода с помощью лексической области видимости и замыканий.Позвольте мне продемонстрировать более мощный пример.
let calc n =
//...
let timesPieDiv4 =
let pie = 3.14
let pieDiv4 = pie/4.
n * pieDiv4
//...
Здесь снова timesPieDiv4
не является функцией, но имеет тело, которое содержит серию подвычислений, которые не подвергаются остальной части calc
функция.На таком языке, как C #, у вас есть два варианта, ни один из которых мне не подходит.Первый вариант - просто объявить pie
и pieDiv4
в основном теле calc
, но тогда менее понятно, как они используются, и вы запачкаете пространство переменных.Другой вариант состоит в том, чтобы выделить эти суб-вычисления в отдельную частную вспомогательную функцию.Но мне не нравятся такие функции, потому что со многими становится сложно анализировать ваши сложные алгоритмы, так как вы постоянно копаетесь в поисках различных частей реализации.Плюс ко всему это много кода котельной плиты и передача значения.Вот почему функции F # по умолчанию являются «общедоступными», лексическая область видимости и замыкания позволяют вам иерархически организовывать «частные» функции и значения в ваших общедоступных функциях.