2017-02-24 21 views
5

F # kod yürütme işlemini anladığımı sanıyordum ama açıkça bir şey eksik. BenUygulamam neden yukarıdan aşağıya doğru çalışıyor

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

aşağıdaki çalıştırdığınızda ben çıktısını almak:

Function A 
Function B 
Function C 

Yani nedense işlevleri yürütme oluyor yerine ters sırada olan işlev çağrılarının bunları okur olarak.

Bu neden?

+5

Bu işlevler değildir. – SLaks

cevap

7

Sana bu hat ne anlama geldiğini yanlış anlıyorsun düşünüyorum:

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

O a için System.Console.WriteLine("Function A") arasında sonucunu atar.

val a : unit =() 

Ve o zaman "İşlev Bir" zaten konsola yazılmıştır: Eğer çalıştırırsanız aunit olarak yazıldığında göreceksiniz.

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

O a() kullanılarak çağrılabilir: muhtemelen istedikleriniz

a bir işlev değil, bir değer olmaktır. Bunu hep birlikte koyarsanız:

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

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

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

c() 
b() 
a() 

size beklediğiniz alırsınız:

Function C 
Function B 
Function A 
+1

Evet, aradığım şey bu. Açıklama için teşekkür ederim. Bu daha mantıklı. –

İlgili konular