问题是:
何时使用私有函数,何时使用嵌套函数?(我问的是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
嵌套函数可以使用更高范围的数据是一个很大的好处。也不会污染周围的模块。但是看起来很笨拙,不是吗?特别是当有一些大型嵌套函数时
相反,私有函数可以公开并进行测试。而且它们看起来更具可读性
你怎么看?