矛盾

2016-04-06 25 views
1

は、ここで私が最近書いていたいくつかのコードからの例です:矛盾

// 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# コードでは、列の位置にオフサイドラインが発生します。たとえば、トークン= は、トークンの後の最初の空白以外のトークン の列にオフサイドラインを導入します。後で

、我々は<直後<-

のルールを参照してください - それに続くトークン は、(a)は、同じライン上に発生していないか、(b)は、いずれかのとき、トークンがencouteredされます試してみてください、 と一致するかどうかは、let、for、for、whileです。

あなたの場合、次のトークン(新規)は同じ行にあり、リストからのものではないため、オフサイドラインはありません。

本質的に=は、異なるルールを持っています。<-