有关F#中元组和用户输入的问题

时间:2016-02-11 02:07:46

标签: f#

我试图用f#来打破基础但是坚持下去。如果你有一般提示,将不胜感激。

#light
open System
[<EntryPoint>]
let main (args : string[]) = 
match args with
    | [| firstName; lastName; city |] ->
        printfn "Hi there %s %s from %s" firstName lastName city
        0
    | _ -> failwith "Usage: HiThere.exe firstName lastName City";;

我收到此错误,

val main : args:string [] -> int

我正在观看有关f#的教程,并试图学习这个功能,但我不明白为什么我能在没有这些错误的情况下做到这一点。

1 个答案:

答案 0 :(得分:1)

args.[0], args.[1]. args.[2]中有一个非常小的拼写错误。您在第二个和第三个元素之间有一个.而不是, - 它应该是args.[0], args.[1], args.[2]

编译器仍然能够解析它,但它将您的代码解释为:

args.[0], (args.[1].args.[2])

这在语法上是一个双元素元组,你将它分配给一个三元素元组,所以你首先得到关于元组的错误。之后它会失败,因为args不是args.[1]的成员,但这是一个单独的消息(编译器忽略它,因为它报告了它之前找到的消息)。

作为旁注,你也可以在数组上使用模式匹配并写:

let main (args : string[]) = 
    match args with
    | [| firstName; lastName; city |] ->
        printfn "Hi there %s %s from %s" firstName lastName city
        0
    | _ -> failwith "Usage: HiThere.exe firstName lastName City"