2017-02-24 19 views
5

Tôi nghĩ rằng tôi đã hiểu được việc thực thi mã F # nhưng rõ ràng là tôi đang thiếu thứ gì đó. Khi tôi chạy sauTại sao ứng dụng của tôi thực hiện từ trên xuống dưới cùng

#!/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 

tôi nhận được kết quả:

Function A 
Function B 
Function C 

Vì vậy, đối với một số lý do nó thực hiện các chức năng như nó đọc chúng trong thay vì các cuộc gọi chức năng mà là theo thứ tự ngược.

Tại sao điều này?

+5

Đó là không chức năng. – SLaks

Trả lời

7

Tôi nghĩ rằng bạn đang hiểu nhầm những gì dòng này có nghĩa là:

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

Nó gán kết quả của System.Console.WriteLine("Function A")-a. Nếu bạn chạy nó, bạn sẽ thấy a được gõ như unit:

val a : unit =() 

Và tại thời điểm đó "Chức năng A" đã được ghi vào an ủi.

Những gì bạn có thể muốn là a là một chức năng và không phải là một giá trị:

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

Nó có thể được gọi bằng a(). Nếu bạn đặt tất cả với nhau:

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

let b() = 
    System.Console.WriteLine("Function B") 

let c() = 
    System.Console.WriteLine("Function C") 

c() 
b() 
a() 

bạn sẽ có được những gì bạn mong đợi:

Function C 
Function B 
Function A 
+1

Vâng, đó là những gì tôi đang tìm kiếm. Cảm ơn bạn đã làm rõ. Điều đó có lý hơn. –

Các vấn đề liên quan