Ниже приведен код, написанный на языке F #:
let f () =
printfn "This function will print f"
0
let xs (x) =
printfn "This function will print xs"
f
()
[<EntryPoint>]
let main ( argv : string[]) =
xs 4 |> ignore
0
Когда я запускаю эту программу, я получаю только один оператор печати (присутствует в функции sx
) на консоли:
Эта функция будет печатать xs
Оператор This function will print f
, присутствующий внутри функции f
, не печатается. Интересно, что когда я нажал F11 , чтобы войти в функцию f
, во время отладки управление вообще не идет туда, даже если внутри функции f
.
есть точка останова.
Интересно, что если я введу параметр в функцию f
, то все это начнет работать. Поэтому, если я изменю функцию f
на:
let f (x) =
printfn "This function will print f"
0
let xs (x) =
printfn "This function will print xs"
f 2
()
[<EntryPoint>]
let main ( argv : string[]) =
xs 4 |> ignore
0
Тогда этот оператор печати начинает работать:
Эта функция будет печатать f
Эта функция будет печатать xs
Может кто-нибудь объяснить это странное поведение? Я уверен, что упускаю что-то очень простое, связанное с миром F # или его функциональный аспект. У меня есть фон C #.