gpt4 book ai didi

F#菜鸟: matching command line args

转载 作者:行者123 更新时间:2023-12-04 00:46:30 26 4
gpt4 key购买 nike

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

[<EntryPoint>]
let main argv =
printfn "%A" argv
match argv with
| [] -> 42
| _ -> 43

但这会产生错误。如果我将鼠标悬停在 argv 上,我会看到:

val argv : string[]



这是我所期望的(字符串列表)。但是第一个匹配表达式有一个错误:

Error 1 This expression was expected to have type string [] but here has type 'a list



基本上我只想匹配一个空的参数列表(一个空的字符串列表)。这样做的正确方法是什么?

我应该补充一点:我不只是想要一个解决方案(尽管那会很好)。我也想了解编译器在这里寻找什么,但我没有给出。

最佳答案

[] 起可能会让人感到困惑文字用于表示空列表,但输入 string []是一个字符串数组而不是一个列表。

您可以像这样对数组进行模式匹配:

[<EntryPoint>]
let main argv =
printfn "%A" argv
match argv with
| [||] -> 42
| _ -> 43

就像 F# 中许多看似不一致的东西一样,这是其双重遗产的结果。

在 OCaml 中,你会使用 int listint array对于类型, [1;2;3][|1;2;3|]分别为值。但在 C#/.NET 中,方括号如 int[]是表明您正在处理数组的方式。

可能是为了让 .NET 人群更容易接受,在类型名称中 F# 使用 []作为 array 的别名,所以两种形式都可用。不幸的是,这与空列表文字重合,但保持“原样”是另一个约束——F# 设计的早期目标之一是使其与 OCaml 代码兼容,因此从该语言移植到 F# 是一种摩擦- 尽可能少。

关于F#菜鸟: matching command line args,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42542117/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com