假设我正在尝试在F#中编写xxd
命令的克隆。它有两种操作模式;一个将二进制文件转换为十六进制转储,另一个(由-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
或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
可能会或不会使用的好命令行解析器库不感兴趣。
答案 0 :(得分:3)
这应该没问题F#
let (inputFile, isReverse) =
if args.[0] = "-r" then
(args.[1], true)
else
(args.[0], false)
...
if false = isReverse then
forwardMode inputFile
else
reverseMode inputFile
两项更改:缩进if
并将==
替换为=