我发现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))
有没有合理的理由说明后者是正确的缩进而不是前者?
答案 0 :(得分:4)
所以这是在规范中定义的 - 来自F#3.1规范中的15.1.4:
轻量级语法有时被称为“越位规则”。在F#中 代码,越位线出现在列位置。例如,= =令牌 与let相关联引入了一个列的越位线 = token之后的第一个非空白标记。
稍后,我们会看到<-
在后续令牌被激活的&lt; - 令牌之后立即执行 要么(a)不在同一条线上,要么(b)是尝试, 匹配,if,let,for,while或use。
我们注意到,在您的情况下,后续令牌(新)位于同一行并且不在列表中,因此没有越位线。
与=
<-
有不同的规则