我以为我理解F#代码执行但很明显我错过了一些东西.当我运行以下
#!/usr/bin/env fsharpi
let a =
System.Console.WriteLine("Function A")
let b =
System.Console.WriteLine("Function B")
let c =
System.Console.WriteLine("Function C")
c
b
a
Run Code Online (Sandbox Code Playgroud)
我得到输出:
Function A
Function B
Function C
Run Code Online (Sandbox Code Playgroud)
因此,由于某种原因,它在执行函数时执行,而不是以相反顺序执行的函数调用.
为什么是这样?
我认为你误解了这条线的含义:
let a =
System.Console.WriteLine("Function A")
Run Code Online (Sandbox Code Playgroud)
其分配的结果System.Console.WriteLine("Function A")来a.如果你运行它,你会看到a输入为unit:
val a : unit = ()
Run Code Online (Sandbox Code Playgroud)
那时"功能A"已经写入控制台了.
你可能想要的是a一个函数,而不是一个值:
let a() =
System.Console.WriteLine("Function A")
Run Code Online (Sandbox Code Playgroud)
它可以使用a().如果你把它们放在一起:
let a() =
System.Console.WriteLine("Function A")
let b() =
System.Console.WriteLine("Function B")
let c() =
System.Console.WriteLine("Function C")
c()
b()
a()
Run Code Online (Sandbox Code Playgroud)
你会得到你期望的:
Function C
Function B
Function A
Run Code Online (Sandbox Code Playgroud)