问题是:私有函数vs嵌套函数
何时使用私有函数以及何时使用嵌套函数? (我问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
这是一个巨大的奖赏,即在嵌套函数可以从更高的范围内使用的数据。也不污染周围的模块。但看起来很笨拙,不是吗?特别是当有一些大的嵌套功能
相反,私人功能可以公开并被测试。看起来它们看起来更具可读性
你的意见是什么?
在真正的代码中看到'let private'非常少见 - 我认为使用私有方法创建类型会比较普遍 – 2013-04-07 06:41:24
我同意'let private'不是很常见,但我认为可能仅仅是因为F#的传统功能。我其实很喜欢'让私人',并发现它非常有用(当私人功能是一个独立的功能)。 – 2013-04-07 13:26:57
私人模块功能的一个刺激...当试图在F#Interactive中运行它们时...我得到这个“错误FS1094:'myPrivateFunction'的值无法从此代码位置访问。我必须删除'private',将函数添加到F#Interactive中,并记得在完成时替换'private'。 – Wally 2015-03-26 18:04:13