2017-07-24 22 views

cevap

6

Bu, match altındaki girintinin birleşimidir ve operatörler için özel durumdur. Her bir vakanın gövdesi, dikey çizgi kadar soldan başlayabilir.

İlk olarak, match'un altındaki. Örneğin, bu çalışır:

match 5 with 
| x -> 
"some value" 

İkincisi, yeni bir satırın başında görünen operatörler için özel bir ofset kural var: Böyle operatörleri genişliğine kadar önceki satırının solunda olabilir operatörün bir artı. Örneğin, bunların hepsi aynı çalışır: ileri boru operatörü başından itibaren solunda kabul edilebilir tolerans içinde olduğu için

let x = 
    "abc" 
    |> printf "%s" 

let y = 
     "abc" 
    |> printf "%s" 

let z = 
"abc" 
    |> printf "%s" 

Yani, ikinci örnekte, match ikinci vaka, printfn hattını kapsamaktadır ilk satır. Eğer dize sağa "value is non-negative" sadece iki boşluk taşırsanız

enter image description here

öne boru artık tolerans içinde olmayacak ve bu yüzden printfn hat maç dışında olarak yorumlanır.

match 5 with 
| k when k < 0 -> 
    "value is negative" 
| k -> 
    "value is non-negative" 
|> printfn "%s" 

İlk örneğinizde, sağdaki 5 boşluk taşınır, bu da çalışır.

+6

Bu, yanlışlıkla, 4 alanın rutin olarak girintilemesi için iyi bir argümandır: çünkü 2 boşluk tarafından girinti yapmak genellikle bu soruna yol açacaktır, ancak 4 satırlık girintiler sadece bir sonraki satırdaki operatörde bu soruna girebilir. en az üç karakter uzunluğunda, örneğin>>>. 4-boşluklu girinti * tamamen * problemsiz olacak: '> =>' ve '>> =' gibi operatörler, her şeyden önce ortak kullanımdadırlar. Ancak, 2 boşluklu girintiyle sorunlara neden olan, ancak | 4'den çok daha az yaygındırlar. – rmunn

+0

Bu kuralın, "kuralsız işleçler" tarzında yazılan bir kodu hiç kimse gördü mü? Daha önce hiç sorun çıkardığını gördüm. – Tarmil

+0

@Tarmil, operatörleri eşit öneme sahip çoklu argümanlar arasında uygulamak için çok işe yarıyor. Her ifadenin kendi satırında yer alacak kadar uzun olduğu, on ifadeden oluşan bir toplamı düşünün. İfadeleri birbirinin hemen altında eşitlemek istemeniz gerekir ki, hepsi eşit olduklarını, kimsenin diğerlerinden daha önemli olmadığını yansıtmak için. –

İlgili konular