У меня проблема с тем, что программа F # не возвращается в конце выражения и завершает выполнение следующего выражения под ним.
Два выражения, как они появляются в файле:
let startCycle =
printfn "startCycle"
(0, "")
let blah =
printfn "blah"
(0, "")
И когда вызывается startCycle
, он выводит оба сообщения на консоль. Пройдя через это с помощью отладчика, он переходит от первого (0, "")
к printfn "blah"
и возвращается при достижении второго (0,"")
. Я несколько раз проверял интервал, и Visual Studio распознает их как два отдельных выражения.
Еще одна странная вещь - если я вызываю startCycle
несколько раз, он печатается только при первом запуске, после каждого вызова ничего не выводится на консоль, если я не остановлю и не перезапущу приложение. Я использую F # 4.7 с .NET Core 3. Чего мне не хватает?
РЕДАКТИРОВАТЬ: Если это помогает, вот как называется startCycle
:
let Run (cmdline: string) : (int * string) =
let cmodel = parseCmd cmdline
printfn "%A" cmodel
match cmodel.Command with
| "sendMsg4" -> Commands.sendMsg4 cmodel.Args
| "sendMsg7" -> Commands.sendMsg7 cmodel.Args
| "sendMsg8" -> Commands.sendMsg8 cmodel.Args
| "sendMsg10" -> Commands.sendMsg10 cmodel.Args
| "sendMsg16" -> Commands.sendMsg16 cmodel.Args
| "sendMsg19" -> Commands.sendMsg19 cmodel.Args
| "sendMsg22" -> Commands.sendMsg22 cmodel.Args
| "sendMsg29" -> Commands.sendMsg29 cmodel.Args
| "sendMixMessages1929" -> Commands.sendMixMessages1929
| "help" | "Help" -> Commands.help cmodel.Args
| "startCycle" -> Commands.startCycle
| "stopCycle" -> Commands.stopCycle
| "cycleStatus" -> Commands.cycleStatus
| "set" -> Commands.setStateValue cmodel.Args
| "show" -> Commands.show cmodel.Args
| "" -> (1, "")
| _ -> (-1, "Unknown Command")