在以下ML提取(取自Effective ML talk)中,值绑定表达式中有一个模块缩写。是否有可能在F#中做同等的事情? 我知道你可以做模块缩写,我特别感兴趣的是你可以像这样“内联”吗。
let command =
let default_config = { exit_code = 0; message = None } in
let flags =
let module F = Command.Flag in
[ F.int "-r" (fun cfg v -> { cfg with exit_code = v });
F.string "-m" (fun cfg v -> { cfg with message = v });
]
...
答案 0 :(得分:1)
不,此功能在F#中不可用。您只能使用:
执行顶级模块缩写(如您所说)module F = Command.Flag
您可以在源文件的中间编写这些文件,但它们必须位于顶层,并且它们的范围始终一直持续到文件末尾(或直到另一个隐藏{{1}的定义为止。 })。也许如果你使用它然后有另一个定义隐藏 F
,它会有类似的效果。例如:
F
我同意在许多情况下这将是一个有用的功能 - 另一方面,F#编程风格与ML有很大不同,因此有效ML谈话的建议可能无法直接映射到F#编程。如果您需要来创建本地定义,那么最好的选择是将其定义为F#对象。