частные функции против вложенных функций
вопрос в том:
когда использовать частные функции и когда использовать вложенные функции? (я спрашиваю оF # но, возможно, ответы могут быть актуальны на других функциональных языках)
маленький пример
namespace SomeName
module BinaryReaderExt =
open System.IO
let seek (reader : BinaryReader) positions =
reader.BaseStream.Seek(positions, SeekOrigin.Current) |> ignore
module Mod =
open System.IO
let private prFun reader:BinaryReader =
//do something
BinaryReaderExt.seek reader 10L
let outerFun (stream :System.IO.Stream) =
let reader = new System.IO.BinaryReader(stream)
let seek = BinaryReaderExt.seek reader
let nestedFun, () =
seek 10L
//do something
nestedFun()
prFun reader
это большой бонус, что вложенная функция может использовать данные из более широкой области видимости. также не загрязняет окружающий модуль. но выглядит неуклюже, не так ли? особенно когда есть несколько больших вложенных функций
напротив, частные функции могут быть обнародованы и протестированы. и кажется, что они выглядят более читабельными
Каково ваше мнение?