F#noob:匹配的命令行参数
开始学习F#。想做一个简单的程序,告诉我它在命令行args中找到了什么。我有:F#noob:匹配的命令行参数,f#,match,argv,F#,Match,Argv,开始学习F#。想做一个简单的程序,告诉我它在命令行args中找到了什么。我有: [<EntryPoint>] let main argv = printfn "%A" argv match argv with | [] -> 42 | _ -> 43 [] 让主argv= printfn“%A”argv 将argv与 | [] -> 42 | _ -> 43 但这会产生错误。如果我将鼠标悬停在argv上,我会看到: val arg
[<EntryPoint>]
let main argv =
printfn "%A" argv
match argv with
| [] -> 42
| _ -> 43
[]
让主argv=
printfn“%A”argv
将argv与
| [] -> 42
| _ -> 43
但这会产生错误。如果我将鼠标悬停在argv上,我会看到:
val argv:string[]
这是我所期望的(字符串列表)。但是,第一个匹配表达式有一个错误:
错误1此表达式应具有类型
字符串[],但此处有类型
"名单",
基本上我只想匹配一个空参数列表(一个空字符串列表)。正确的方法是什么
我应该补充一点:我不仅仅想要一个解决方案(尽管那会很好)。我还想了解编译器在这里寻找什么,我没有给出。这可能会让人困惑,因为
[]
literal用于表示空列表,但typestring[]
是字符串数组而不是列表
您可以对如下数组进行模式匹配:
[<EntryPoint>]
let main argv =
printfn "%A" argv
match argv with
| [||] -> 42
| _ -> 43
[]
让主argv=
printfn“%A”argv
将argv与
| [||] -> 42
| _ -> 43
就像F#中许多看似不一致的东西一样,这是其双重遗产的结果
在OCaml中,对类型使用int-list
和int-array
,对值分别使用[1;2;3]
和[1;2;3 |]
。但是在C#/.NET中,int[]
中的方括号表示您正在处理数组
可能是为了让.NET人群更容易接近,在类型名称中,F使用
[]
作为数组
的别名,因此这两种形式都是可用的。不幸的是,这与空列表文字一致,但保持“原样”是另一个限制条件——F#design的早期目标之一是使其与OCaml代码兼容,以便从该语言移植到F#时尽可能减少摩擦。是的!这太令人困惑了!看起来也不一致,但谢谢!你的解决方案works@user1443098不要忘记标记答案(只需单击绿色勾选即可)@用户1443098:同意。它在某种意义上是一致的,但可能不是你所期望的。我已经为答案添加了更多的背景知识。@scrwtp您能解释一下[| |]
的意思以及它为什么工作吗?@supertopi:这是空数组文本,同样的[]
是一个空列表。这就是你写一个零元素数组的方法,只剩下左括号和右括号。