嵌套函数调用中的printfn不会在控制台上打印任何内容

时间:2018-05-16 05:58:42

标签: f# printf

我在下面提到的用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

当我运行这个程序时,我在控制台上只得到一个print语句(存在于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

然后这个print语句开始起作用:

  

此功能将打印f

     

此功能将打印xs

有人可以解释这种奇怪的行为吗?我确定我遗漏了与F#世界或其功能方面相关的非常基本的东西。我是C#背景。

1 个答案:

答案 0 :(得分:4)

你没有打电话给f,你只是在那里放置一个功能而没有给它所需的参数。

这就是为什么它给你一个参数时它的工作原理。你还必须对空括号做同样的事情:

let xs (x) = 
    printfn "This function will print xs"
    f ()
    ()

如果您希望最终的()充当f的参数,则必须添加更多缩进:

let xs (x) = 
    printfn "This function will print xs"
    f
     ()
相关问题