Я играл вокруг F # и заметил проблему, которую я не могу понять. Скажем, я хочу получить ряд целочисленных входов от пользователя и хранить его в массиве:F # for loop error
[<EntryPoint>]
let main =
let n = Console.ReadLine() |> int
let inputVals = Array.zeroCreate n
for i in 0 .. n - 1 do
inputVals.[i] <- (Console.ReadLine() |> int)
printf "%A\n" inputVals
0 //compiler error here. The type does not match the expected type
Но это дает ошибку
This expression was expected to have type string [] -> int but here has type int
После некоторых игр вокруг, я подозреваю, что ошибка исходит от для цикла. Но я не могу понять, почему он ожидает строку [] -> int. Это кажется очень простой проблемой, но я просто могу понять, что происходит.
Спасибо, что сделал трюк. Означает ли это, что F # не позволяет точке входа не иметь входных аргументов. В принципе это возможно в F #: 'public static void Main()'? – mashrur
@ mashrur Я уверен, что вы не можете этого сделать. Функция сигнатуры точки входа - ['string [] -> int'] (http://msdn.microsoft.com/en-us/library/dd402151.aspx), и это все :) –
@mashrur Аргументы всегда есть, но вы можете, конечно, игнорировать их: 'let main _ = ...' – Tarmil