0

假设我正在尝试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# 中编写此代码?我不是refor的忠实粉丝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

4

1 回答 1

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替换===

于 2014-10-28T07:20:50.213 回答