为什么我不能使用比赛!在计算表达式中吗?

时间:2018-08-09 05:09:39

标签: f# monads syntactic-sugar computation-expression

Starting with F# 4.5, the match! keyword allows you to inline a call to another computation expression and pattern match on its result

据我所知,我正在使用F#4.5。

screen shot of project settings

但是,VS2017不喜欢以下代码

let someAsyncIntOption = async{
    return Some 1
}

let someAsyncString = async{
    match! someAsyncIntOption with
    |Some 1 -> return "Some one"
    |_ -> return "None"
}

匹配!无法识别为有效语法。

我需要做什么才能使这项工作成功?

2 个答案:

答案 0 :(得分:2)

F# 4.5 was released in VS 2017 v15.8 preview 5。以F#4.5运行时为目标还不够。您还必须具有F#4.5 编译器,以使该语法被接受。 F#4.5编译器随附VS 15.8预览版5;如果您运行的Visual Studio版本低于15.8预览5,则说明您有一个不了解match!语法的F#编译器。

答案 1 :(得分:1)

根据...

https://blogs.msdn.microsoft.com/dotnet/2018/07/26/announcing-f-4-5-preview/

如果您还没有...

首先,安装:

  • .NET SDK 2.1.400的预览,以确保您具有.NET Core中F#的最新信息
  • 如果您使用的是Windows,则Visual Studio 2017更新15.8 Preview 5

如果在Visual Studio中(通过F#桌面开发组件)创建.NET桌面F#项目,则需要使用NuGet UI将FSharp.Core软件包更新为4.5.2。

一旦安装了必要的位,就可以开始使用Visual Studio,Visual Studio for Mac或使用Ionide的Visual Studio Code开发F#4.5代码。

发布.NET Core SDK 2.1.400和Visual Studio 2017 15.8版时,对于所有新项目,引用的FSharp.Core将为4.5.2,并且您无需执行第二步。

可能只有在将FSharp.Core软件包更新为4.5.2之后,您才需要将.NET Core作为目标。

我还没有尝试过任何方法,但是希望对您有所帮助。