2010-11-28 10 views
2

Einige apis wie Ninject fließend Art Apis verwenden, Beispiel:Formatierung fließend/Methode aus C# verketten Code in F #

Bind<ISomething>() 
.To<Something>() 
.WithConstructorArgument("arg1", "somevalue") 
.OnActivation(x => x.DoSomething()) 

Wenn ich formatiert werden versuchen, den Code wie folgt in F # beschwert sich der Compiler an der Leerzeichen zwischen Methodenaufrufe .

Ist es möglich, die Methodenaufrufe auf separate Zeilen zu setzen? Ich dachte etwas wie der Pipelining-Operator |> aber nicht genau, wie in diesem Fall.

Wie soll das in F # formatiert werden?

Antwort

6

Sind Sie sicher, dass das nicht funktioniert?

Bind<ISomething>() 
.To<Something>() 
.WithConstructorArgument("arg1", "somevalue") 
.OnActivation(fun x -> x.DoSomething()) 

(beachten Sie ein Leerzeichen vor den . s)

Ja, es ist in Ordnung:

type ISomething = interface end 
type Something = class end 

type Foo() = 
    member this.To<'a>() = this //' 
    member this.WithConstructorArgument(s1,s2) = this 
    member this.OnActivation(x:Foo->unit) = this 
    member this.DoSomething() =() 

let Bind<'a>() = new Foo() //' 

let r = 
    Bind<ISomething>() 
     .To<Something>() 
     .WithConstructorArgument("arg1", "somevalue") 
     .OnActivation(fun x -> x.DoSomething()) 

Solange Sie einige führende Leerzeichen haben, wenn Sie versuchen, einen einzelnen Ausdruck auf mehrere fortzusetzen Linien, du bist in Ordnung.

(Beachten Sie, dass Pipelining in der Regel wird nicht funktionieren, es sei denn, Sie APIs für sie mit Curry-Methodenparameter entwickelt haben.)