olarak Bahsedilen diğerleri, pipelining daha çok bir UNIX kabuk boru hattı gibidir. Her zamanki iç içe geçmiş işlev çağrıları yerine, ona uygulanması gereken işlemleri takip eden bir girdi yazalım. Bu örnekte, standart F # kodu şu şekilde görünecektir: Giriş nums
derinden ifadesinde yuvalanır ve buna süzüldükten sonra tahmin olduğunu görmek kolay olmadığını
let r = List.map (add 10) (List.filter (fun n-> n%2 <> 0) nums)
Not. Boru hattını kullanarak, kodu farklı yazabilirsiniz, ancak aynı şey anlamına gelecektir.
trick boruhattı operatör infix gösterimini (örneğin x |> f
) kullanılarak iki parametre olmasıdır. x
parametresi sağdaki bir işlevin son bağımsız değişkeni olarak iletilecektir (f
). Herhangi F # işlevleriyle borulama kullanabilirsiniz:
let sinOne = 1.0 |> sin
let add a b = a + b
let r = 10 |> add 5 // it doesn't always make code more readable :-)
F # boruhattı operatörü ilgili önemli bir nokta da olmadığıdır herhangi bir özel dahili dilin özelliği.Bunun
let (|>) x f = f x
// Thanks to operator associativity rules, the following:
let r = 1.0 |> sin |> sqrt
// ...means this:
let r = (1.0 |> sin) |> sqrt
Think daha PowerShell veya geleneksel kabuklarda boru hattı gibi (gerçi, nesneler o PowerShell gerçekten daha akrabadan geçirilir düşünüyor): Bu kendi başınıza tanımlayabilirsiniz Basit bir özel operatörüdür. CPU boru hattı ile doğrudan ilgisi yoktur :-) – Joey
@Johannes: Böyle bir şey demek istiyorsun ... kedi myfile | daha fazla, daha fazla tarafından işlenecek çıktıya bir giriş geçirilir? – t0mm13b
Tam olarak. Ancak, söylendiği gibi, UNIX kabuk benzetmesi bunun için oldukça kusurludur. – Joey