質問は:
いつプライベート関数を使用し、いつネストされた関数を使用するのですか? (私は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
ネストされた関数がより高いスコープのデータを使用できることは大きなボーナスです。また、周囲のモジュールを汚染しません。でも不器用ですね。特に大きなネストされた関数がある場合
反対に、プライベート関数を公開してテストできます。そして、それらはより読みやすいように見えます
あなたの意見は何ですか?