F#:if-else作为表达式(返回值)?

时间:2014-10-28 07:16:16

标签: if-statement f# immutability multiple-value

假设我正在尝试在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#中写这个?我不是refmutable的忠实粉丝,虽然我知道我可以和他们一起写这样的东西:

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可能会或不会使用的好命令行解析器库不感兴趣。

1 个答案:

答案 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并将==替换为=