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

If statement F#:if else作为表达式(返回值)?,if-statement,f#,immutability,multiple-value,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 el

假设我试图在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

这对#

两个更改:如果
缩进
,并用
=

替换
=
,这对#

两个更改:如果
缩进
,并用
=

替换
=
,这对#

两个更改:如果
缩进
,并用
=

替换
=
,这对#


>两个更改:缩进<代码>如果,用<代码> > <代码> > /p> > OPPS,<代码> = = > /COD>只是一个打印错误(我写C++用于我的日常工作)。我永远无法习惯越位规则…也许我应该更仔细地听<代码> fSARPC。OOP,=只是一个排字(我写C++的我的日常工作)。我永远无法习惯越位规则…也许我应该更仔细地听<代码> fSARPC。OOP,=只是一个排字(我写C++的我的日常工作)。我永远无法习惯越位规则…也许我应该更仔细地听<代码> fSARPC。OOP,=只是一个排字(我写C++的我的日常工作)。我永远无法习惯越位规则…也许我应该更仔细地听一下fsharpc。

let (inputFile, isReverse) = 
    if args.[0] = "-r" then
        (args.[1], true)
    else
        (args.[0], false)
...
if false = isReverse then
    forwardMode inputFile
else
    reverseMode inputFile