无法在F#中创建列表文字

过度过度

我有以下几种

type StatusCode = 
    | OK          = 200
    | NoContent   = 204
    | MovedTemp   = 301
    | MovedPerm   = 302
    | SeeOther    = 303
    | NotModified = 304
    | NotFound    = 404
    | ServerError = 500

[<Literal>]
let NoBodyAllowedStatusCodes = [StatusCode.NoContent; StatusCode.NotModified]

而且我收到一个编译时错误,提示:

这不是有效的常量表达式或自定义属性值

我真的无法弄清楚这里出了什么问题。

vcsjones

在F#和.NET中,列表不能是文字(在C#/ VB.NET中是常数)。只有基本值可以,例如stringbool等等。F#3.0规范在10.2.2节中提供了关于可以或不能为文字的指导原则:

具有文字属性的值受到以下限制:

  • 它可能未标记为可变或内联。
  • 它可能也没有ThreadStatic或ContextStatic属性。
  • 右侧表达式必须是由以下任意一个组成的文字常量表达式:
  • 一个简单的常量表达式,除了(),本地整数文字,无符号本地整数文字,字节数组文字,BigInteger文字和用户定义的数字文字外。

-要么-

  • 对另一个文字的引用。

如果let要在类中使用绑定,则可以根据您要执行的操作将列表设为静态如果在模块中,我将删除该Literal属性,因为默认情况下,let绑定是不可变的。

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章