【发布时间】:2017-04-17 14:00:05
【问题描述】:
在The F# 4.0 Language Specification,它说:
7.2 命名模式
如果 long-ident 长度超过一个字符或以大写字符开头(即,如果 System.Char.IsUpperInvariant 是 true 并且 System.Char.IsLowerInvariant 在第一个字符上是 false),它通过使用模式中的 名称解析来解决(第 14.1.6 节)。该算法产生以下之一:
- 联合案例
- 异常标签
- 活动模式案例名称
- 文字值
所以下面的代码不起作用:
[<Literal>]
let zero = 0
let matchZero = function
| zero -> printfn "Is %A" zero
| _ -> printfn "Not 0"
zero 应该与模块一起使用,或者有第一个大写字母Z:
module Match =
[<Literal>]
let zero = 0
let matchZero = function
| Match.zero -> printfn "Is %A" Match.zero
| _ -> printfn "Not 0"
///////////////////////////////////////
///////////////////////////////////////
[<Literal>]
let Zero = 0
let matchZero = function
| Zero -> printfn "%A" Zero
| _ -> printfn "Not 0"
为什么文字 zero 必须有第一个大写字母才能正常工作?
【问题讨论】:
标签: .net f# functional-programming pattern-matching ocaml