我在下面提到的用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#背景。
答案 0 :(得分:4)
你没有打电话给f
,你只是在那里放置一个功能而没有给它所需的参数。
这就是为什么它给你一个参数时它的工作原理。你还必须对空括号做同样的事情:
let xs (x) =
printfn "This function will print xs"
f ()
()
如果您希望最终的()
充当f
的参数,则必须添加更多缩进:
let xs (x) =
printfn "This function will print xs"
f
()