我想让applyAndTruncate
隐藏在外部世界(即来自Scoring
模块之外的任何内容),因为我实际上只将它用作bestKPercent
的主干worstKPercent
。有可能隐藏它吗?如果没有,F#是实现我想做的事情的方式是什么?
module Scoring
let applyAndTruncate f percentage (scoredPopulation:ScoredPopulation) : ScoredPopulation =
if (percentage < 0.0 || percentage > 1.0) then
failwith "percentage must be a number between 0.0 and 1.0"
let k = (int)(percentage * (double)(Array.length scoredPopulation))
scoredPopulation
|> f
|> Seq.truncate k
|> Seq.toArray
let bestKPercent = applyAndTruncate sortByScoreDesc
let worstKPercent = applyAndTruncate sortByScoreAsc
答案 0 :(得分:49)
是。 let private myfunc =
会做到这一点。
答案 1 :(得分:12)
您还可以使用signature files指定相应实现文件的公共接口。然后,我们的想法是,在实施固化之前,您不必担心可访问性。老实说,我从来没有使用它们,但它们被广泛用于F#编译器源代码(可能只是因为我对其他许多语言中使用的实现网站风格感到满意,而具有原始ML经验的人会很放心带有签名文件;还有you do get some extra features带有签名文件,但没有什么超级引人注目的。)
因此,如果您的Scoring
模块是在名为Scoring.fs
的文件中实现的,那么您将拥有一个名为Scoring.fsi
的相应签名文件,其类似于:
namespace NS //replace with you actual namespace; I think you must use explicit namespaces
module Scoring =
//replace int[] with the actual ScoredPopulation type; I don't think you can use aliases
val bestKPercent : (float -> int[] -> int[])
val worstKPercent : (float -> int[] -> int[])