Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F#noob:匹配的命令行参数_F#_Match_Argv - Fatal编程技术网

F#noob:匹配的命令行参数

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

开始学习F#。想做一个简单的程序,告诉我它在命令行args中找到了什么。我有:

[<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用于表示空列表,但type
string[]
是字符串数组而不是列表

您可以对如下数组进行模式匹配:

[<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:这是空数组文本,同样的
[]
是一个空列表。这就是你写一个零元素数组的方法,只剩下左括号和右括号。