Ove*_*ive 4 f# compile-time-constant constant-expression
我有以下几种类型
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]
Run Code Online (Sandbox Code Playgroud)
我得到一个编译时错误,说:
这不是有效的常量表达式或自定义属性值
我无法弄清楚这里有什么问题.
在F#和.NET中,列表不能是文字(在C#/ VB.NET中是常量).只有原始值可以像string,bool等F#3.0规范有什么可以或不可以在10.2.2节文字的指导方针:
具有Literal属性的值受以下限制:
- 它可能没有标记为可变或内联.
- 它可能也没有ThreadStatic或ContextStatic属性.
- 右侧表达式必须是由以下任一组成的文字常量表达式:
- 一个简单的常量表达式,除了(),本机整数文字,无符号本机整数文字,字节数组文字,BigInteger文字和用户定义的数字文字.
-要么-
- 对另一个文字的引用.
根据您要执行的操作,如果let在类中使用绑定,则可以使列表成为静态.如果它在一个模块中,我只是删除该Literal属性,因为默认情况下,绑定是不可变的.
| 归档时间: |
|
| 查看次数: |
439 次 |
| 最近记录: |