2017-02-24 31 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

是的,這就是我要找的。謝謝你澄清。這更有意義。 –

相關問題