2016-09-03 52 views
7

F # aşağıdaki deyimi bu 'let' Aşağıdakiİfadenin ilk satırı neden derlenmeyecek şekilde aynı çizgiye koyuyor?

let listx2 = [1..10] 
    |> List.map(fun x -> x * 2) 
    |> List.iter (fun x -> printf "%d " x) 

Blok bitmemiş aşağıdaki hatalarla başarısız olur. Bir ifade bekle.

Beklenmeyen infix operatörü bağlayıcıdır. Bu noktada veya bu noktadan önce veya başka bir belirteçte tamamlanmamış yapılandırılmış yapı bekleniyor. Aşağıdaki derleyecek Ancak

let listx2 = 
    [1..10] 
    |> List.map(fun x -> x * 2) 
    |> List.iter (fun x -> printf "%d " x) 

Ben de bu derler fark ama

let listx2 = [1..10] |> 
    List.map(fun x -> x * 2) |> 
    List.iter (fun x -> printf "%d " x) 

Olası yanlış girinti bir uyarı vardır: Bu simge bağlamın ofsayt olduğu pozisyonda başlayan (10:18). Bu belirteci daha fazla girmeyi veya standart biçimlendirme kurallarını kullanmayı deneyin.

İlk iki ifade arasındaki fark nedir?

cevap

7

Eğer örtülü [ aynı karakterde olması sonraki satıra girinti düzeyini ayarlarken

let listx2 = [1..10] 

olduğunda. Belirtilen kurallar için aşağıdaki kural tarafından belirtildiği gibi:

Bir Belirt veya Üyelik bağlamında bir = belirteci ile karşılaşıldıktan hemen sonra.

Yani ilk örnekte, |> az [ böylece bir hata ile girintili, ancak ikinci onlar, o yüzden tüm eserler aynıdır.

|> satırının sonuna taşınmanın neden bir uyarı verdiğinden emin değilim.

+0

eol '|>' için: Ben bir operatör ile biten bir satır, çentiğe bakılmaksızın bir sonraki satırda örtülü olarak devam ettiğini düşünüyorum. – Tarmil