为什么我的应用程序从上到下执行

Ant*_*ell 5 f#

我以为我理解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)

因此,由于某种原因,它在执行函数时执行,而不是以相反顺序执行的函数调用.

为什么是这样?

Mar*_*zek 7

我认为你误解了这条线的含义:

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)