Ответ 1
Это может сбивать с толку, поскольку []
literal используется для обозначения пустого списка, но type string []
- это массив строк, а не список.
Вы можете сопоставить шаблон с массивом следующим образом:
[<EntryPoint>]
let main argv =
printfn "%A" argv
match argv with
| [||] -> 42
| _ -> 43
Как и многие, казалось бы, непоследовательные вещи в F #, это результат его двойного наследия.
В OCaml вы должны использовать int list
и int array
для типов, [1;2;3]
и [|1;2;3|]
для значений соответственно. Но в С#/.NET квадратные скобки как в int[]
- это способ указать, что вы имеете дело с массивом.
Вероятно, чтобы попытаться быть более доступным для толпы .NET, в именах типов F # использует []
как псевдоним для array
, поэтому обе формы могут использоваться. Очень печально, что это совпадает с пустым литералом списка, но оставляя это "как есть" еще одним ограничением - одна из ранних целей в дизайне F # заключалась в том, чтобы сделать его совместимым с кодом OCaml, так что перенос с этого языка на F # является трением как можно меньше.