Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F#:使用括号和不使用括号定义的类型之间的差异_F# - Fatal编程技术网

F#:使用括号和不使用括号定义的类型之间的差异

F#:使用括号和不使用括号定义的类型之间的差异,f#,F#,F#中的type Something()和type Something有什么区别 works中引用此代码段的原因: 开放系统 打开Microsoft.AspNetCore.Hosting 打开Microsoft.AspNetCore.Builder 打开Microsoft.AspNetCore.Hosting 打开Microsoft.AspNetCore.Http 键入Startup()= 配置(应用程序:IAApplicationBuilder)= app.Run(fun context->c

F#中的
type Something()
type Something
有什么区别

works中引用此代码段的原因:

开放系统
打开Microsoft.AspNetCore.Hosting
打开Microsoft.AspNetCore.Builder
打开Microsoft.AspNetCore.Hosting
打开Microsoft.AspNetCore.Http
键入Startup()=
配置(应用程序:IAApplicationBuilder)=
app.Run(fun context->context.Response.WriteAsync(“来自ASP.NET核心的你好!”)
[]
让主argv=
让host=WebHostBuilder().UseKestrel().UseStartup().Build()
host.Run()
printfn“服务器已完成!”
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
开放系统
打开Microsoft.AspNetCore.Hosting
打开Microsoft.AspNetCore.Builder
打开Microsoft.AspNetCore.Hosting
打开Microsoft.AspNetCore.Http
类型启动=
配置(应用程序:IAApplicationBuilder)=
app.Run(fun context->context.Response.WriteAsync(“来自ASP.NET核心的你好!”)
[]
让主argv=
让host=WebHostBuilder().UseKestrel().UseStartup().Build()
host.Run()
printfn“服务器已完成!”
0

您可以通过在F#Interactive(交互式)对话框中键入它来查看差异:

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#For fun and price页面。也看看这个


如果有疑问,请打开F#interactive,键入您希望看到两者之间差异的两个内容,然后比较输出,以供将来参考。这是一个功能强大的工具,您应该使用它。

不同的类型都是通过F#中的
type
关键字定义的,包括类型别名、DU、记录、类等。不同的参数将指示您创建的类型。
type Parens =
  class
    new : unit -> Parens
    member add10 : x:int -> int
  end
type NoParens =
  class
    member add10 : x:int -> int
  end