2016-04-06 37 views
1

我发现F#有些关于它的缩进警告不一致的,这里的一些代码,我最近写的例子:不一致的缩进警告

// Weird: F# complains with FS0058 about d2dDevice here 
use d2dContext = new SharpDX.Direct2D1.DeviceContext(
    d2dDevice, SharpDX.Direct2D1.DeviceContextOptions.None) 

// But not about d2dContext here 
d2dContext.Target <- new Bitmap1(
    d2dContext, 
    backBuffer, 
    BitmapProperties1(
     PixelFormat(
      SharpDX.DXGI.Format.B8G8R8A8_UNorm, 
      SharpDX.Direct2D1.AlphaMode.Premultiplied), 
     96.f, 96.f, BitmapOptions.Target ||| BitmapOptions.CannotDraw)) 

是否有一个合乎逻辑的理由,后者是正确的缺口,但不是前?

回答

4

因此,这在规范中定义的所有 - 从15.1.4在规格为F#3.1:

轻量级语法有时被称为“越位规则”。在F# 代码中,列位置出现越位行。例如,与let关联的= token 在=标记后面的第一个非空白标记的列处引入了一条位于第列的越位行。

后来,我们看到<-

立即<后

规则 - 在随后的令牌 是(a)在同一行上不发生或(b)为令牌encoutered尝试之一, 匹配,如果,让,为,或使用。

我们注意到,在您的情况下,随后的标记(新)位于同一行上,并且不在列表中,因此不存在任何越位行。

基本上=<-

相比有不同的规则