2016-04-06 41 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嘗試之一, 匹配,如果,讓,爲,或使用。

我們注意到,在您的情況下,隨後的標記(新)位於同一行上,並且不在列表中,因此不存在任何越位行。

基本上=<-

相比有不同的規則