2016-07-10 112 views
4

F#中的type Something()type Something有什麼區別?F#:有括號和不帶括號的類型之間的區別

爲什麼這個片段在ASP.NET Core 1.0 F# project作品引用:

open System 
open Microsoft.AspNetCore.Hosting 
open Microsoft.AspNetCore.Builder 
open Microsoft.AspNetCore.Hosting 
open Microsoft.AspNetCore.Http 

type Startup() = 
    member this.Configure(app: IApplicationBuilder) = 
     app.Run(fun context -> context.Response.WriteAsync("Hello from ASP.NET Core!")) 

[<EntryPoint>] 
let main argv = 
    let host = WebHostBuilder().UseKestrel().UseStartup<Startup>().Build() 
    host.Run() 
    printfn "Server finished!" 
    0 

但這種失敗:

open System 
open Microsoft.AspNetCore.Hosting 
open Microsoft.AspNetCore.Builder 
open Microsoft.AspNetCore.Hosting 
open Microsoft.AspNetCore.Http 

type Startup = 
    member this.Configure(app: IApplicationBuilder) = 
     app.Run(fun context -> context.Response.WriteAsync("Hello from ASP.NET Core!")) 

[<EntryPoint>] 
let main argv = 
    let host = WebHostBuilder().UseKestrel().UseStartup<Startup>().Build() 
    host.Run() 
    printfn "Server finished!" 
    0 
+0

不同的類型都是通過F#中的'type'關鍵字定義的,包括類型別名,DU,記錄,類等等。不同的參數將指出你正在創建什麼類型的類型。 [介紹F#類型:](http://fsharpforfunandprofit.com/series/understanding-fsharp-types.html) – s952163

回答

7

您可以通過在F#互動鍵入它看到了差距:

type Parens() = 
    member this.add10 x = x + 10 

type NoParens = 
    member this.add10 x = x + 10;; 

輸出:

type Parens = 
    class 
    new : unit -> Parens 
    member add10 : x:int -> int 
    end 
type NoParens = 
    class 
    member add10 : x:int -> int 
    end 

第二個類沒有定義構造函數。編譯器不應該允許的東西,但出於某種原因。它不會生成像C#這樣的自動構造函數。

欲瞭解更多信息,請查閱F#以獲取更多樂趣和獲利關於classesinterfaces的網頁。另外看看這個StackOverflow post

並且爲了將來的參考,當有疑問的時候,打開F#interactive,輸入你想查看的兩個東西之間的區別,並比較輸出結果。這是一個強大的工具,你應該使用它。

相關問題