压痕警告不一致

时间:2016-04-06 00:50:37

标签: f#

我发现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))

有没有合理的理由说明后者是正确的缩进而不是前者?

1 个答案:

答案 0 :(得分:4)

所以这是在规范中定义的 - 来自F#3.1规范中的15.1.4:

  

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

稍后,我们会看到<-

的规则
  

在后续令牌被激活的&lt; - 令牌之后立即执行   要么(a)不在同一条线上,要么(b)是尝试,   匹配,if,let,for,while或use。

我们注意到,在您的情况下,后续令牌(新)位于同一行并且不在列表中,因此没有越位线。

=

相比,基本上<-有不同的规则