2016-07-10 8 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 

が、これは失敗します。あなたはF#インタラクティブに入力して違いを見ることができます

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

異なる型は、型エイリアス、DU、レコード、クラスなど、F#の 'type'キーワードですべて定義されます。異なる引数は、作成している型の種類を示します。 [Intro to F#types:](http://fsharpforfunandprofit.com/series/understanding-fsharp-types.html) – s952163

答えて

7

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 

第2のクラスにはコンストラクターが定義されていません。コンパイラが許可してはならないものが何らかの理由であります。それはC#のような自動コンストラクタを生成しません。

詳細についてはF#を楽しみにしてページをclassesinterfacesにチェックしてください。また、これをチェックしてくださいStackOverflow post

疑問がある場合は、F#インタラクティブを開き、違いを見たい2つのものを入力し、出力を比較してください。これは強力なツールであり、使用する必要があります。

関連する問題