为什么在F#中不编译匹配的代码版本

汤玛士

这是一些代码:

type Test() =

    static member SomeValue =
        "AAA"

    static member test1 (a) =
        match a with
        | Test.SomeValue -> "a"
        | _              -> "b"

    static member test2 (a) =
        if a = Test.SomeValue then
            "a"
        else
            "b"

test2编译时test1版本将不会编译([FS0039]类型“ Test”没有定义字段,构造函数或成员“ SomeValue”。)

由于SomeValue没有任何参数,因此它将被评估一次,使其成为常数。在这种情况下,编译器为什么不接受它?

Nghia Bui

在该test1版本中,您正在使用模式匹配,因此必须在管道符号(提供一个模式|

不过Test.SomeValue是一个属性,而不是一个模式,根据微软的文档

因此,例如,要在代码中使用模式匹配,可以将其标记SomeValueLiteral

type Test() =

    [<Literal>] static let SomeValue = "AAA"

    static member test1 (a) =
        match a with
        | SomeValue -> "a"
        | _         -> "b"

    static member test2 (a) =
        if a = SomeValue then
            "a"
        else
            "b"

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么此具有成员约束的F#代码无法编译?

来自分类Dev

为什么这个简单的F#代码比C#/ C ++版本慢36倍?

来自分类Dev

F#中的类型不匹配错误

来自分类Dev

F#中的类型不匹配错误

来自分类Dev

为什么此Scala代码的编译错误类型不匹配

来自分类Dev

在F#中,“期望”和“给定”之间类型不匹配的错误是什么意思?

来自分类Dev

为什么在F#中不将隐式参数视为编译器错误

来自分类Dev

为什么这种内联用法会导致F#中的编译错误?

来自分类Dev

为什么在此代码中,编译器选择r值引用版本

来自分类Dev

为什么该程序的F#版本比Haskell的F#版本快6倍?

来自分类Dev

如何在Mac上的任何版本中编译F#?

来自分类Dev

为什么F#库没有dll版本?

来自分类Dev

为什么F#库没有dll版本?

来自分类Dev

forEach参数与使用者功能接口参数不匹配,但是代码仍然可以编译,为什么?

来自分类Dev

在ASP.NET vNext中,为什么不即时重新编译代码?

来自分类Dev

F#中是否有函数专业化,为什么不呢?

来自分类Dev

F#中是否有函数专业化,为什么不呢?

来自分类Dev

为什么不编译?

来自分类Dev

为什么不编译?

来自分类Dev

F#:不了解与..的匹配

来自分类Dev

F#:不了解与..的匹配

来自分类Dev

为什么clang ++不编译以下代码?

来自分类Dev

为什么C#不直接编译为机器代码?

来自分类Dev

为什么clang ++不编译以下代码?

来自分类Dev

Xcode 6:为什么现在不编译该代码?

来自分类Dev

为什么编译器不优化中断代码?

来自分类Dev

为什么F#约束我的代码并删除泛型?

来自分类Dev

为什么F#约束我的代码并删除泛型?

来自分类Dev

为什么不匹配?

Related 相关文章

热门标签

归档