假设我正在尝试xxd
在 F# 中编写命令的克隆。它有两种操作模式;一个将二进制文件转换为十六进制转储,另一个(由 选择-r
)将十六进制转储转换回二进制文件。
有些语言允许我写这样的东西:
let (inputFile, isReverse) = if args.[0] == "-r" then
(args.[1], true)
else
(args.[0], false)
...
if false == isReverse then
forwardMode inputFile
else
reverseMode inputFile
但这似乎无法在 F# 下编译。是否有任何惯用的方法可以在 F# 中编写此代码?我不是ref
or的忠实粉丝mutable
,尽管我知道我可以和他们一起写这样的东西:
let isReverse = ref false
let fileName = ref args.[0]
if !args.[0] == "-r" then
isReverse := true
fileName := args.[1]
...
if false == !isReverse then
forwardMode !inputFile
else
reverseMode !inputFile
注意:我对我可能会或可能不会获得的漂亮命令行解析器库不感兴趣nuget
。