2017-02-24 72 views
5

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

我得到的输出:

Function A 
Function B 
Function C 

所以,由于某种原因,它执行的功能,因为它的替代函数调用它们以相反的顺序读取它们。

这是为什么?

+5

那些不是功能。 – SLaks

回答

7

我想你误会这行的意思是:

let a = 
    System.Console.WriteLine("Function A") 

它指定的System.Console.WriteLine("Function A")的结果a。如果你运行它,你会看到a的类型为unit

val a : unit =() 

而那个时候“功能A”已经写入控制台。

你可能想要的是a是一个函数,而不是一个值:

let a() = 
    System.Console.WriteLine("Function A") 

它可以通过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() 

你会得到你所期望的:

Function C 
Function B 
Function A 
+1

是的,这就是我要找的。谢谢你澄清。这更有意义。 –

相关问题