像Ninject这样的一些api使用流畅的风格apis,例如:
Bind<ISomething>()
.To<Something>()
.WithConstructorArgument("arg1", "somevalue")
.OnActivation(x => x.DoSomething())
当我尝试在F#中格式化这样的代码时,编译器会在方法调用之间的空白处抱怨。
是否可以将方法调用放在单独的行上?我在想像流水线运算符|&gt;但在这种情况下并不确定如何。
如何在F#中格式化?
答案 0 :(得分:7)
你确定这不起作用吗?
Bind<ISomething>()
.To<Something>()
.WithConstructorArgument("arg1", "somevalue")
.OnActivation(fun x -> x.DoSomething())
(注意.
之前的一个空格)
是的,没关系:
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())
只要在尝试将单个表达式连续到多行时有一些前导空格,就可以了。
(请注意,除非您使用curried方法参数为其设计API,否则流水线操作通常无效。)