我有以下代码:
try
let s = orderId.Split('|')
match (s.[0], s.[1]) with
| "G", coreGuid -> OrderClass.Grid
| "C", coreGuid -> OrderClass.Close
| _, _ -> OrderClass.External
with _ ->
OrderClass.External
Run Code Online (Sandbox Code Playgroud)
它采用“letter|guid”形式的字符串,然后尝试匹配它。我想要实现的逻辑是:
if s.[0] = "G" && s.[1] = coreGuid for the first line, and
if s.[0] = "C" && s.[1] = coreGuid for the second line
Run Code Online (Sandbox Code Playgroud)
但是我的 IDE(Rider 2020.1 MacOs)给了我这个警告:
我不明白为什么?
这是因为在模式部分,变量正在捕获匹配的值。这意味着无论 的值s.[1]是什么,它都会绑定到名称,coreGuid因此可以在右侧使用。IDE 让您知道没有在任何地方使用它。
这是一条有用的错误消息,因为您的代码没有按照您的预期运行。它忽略了 的值s.[1]。只要变量出现在模式中,就意味着该字段可以具有任何值。
我认为这应该按您的预期工作:
| "G", g when g = coreGuid -> OrderClass.Grid
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
73 次 |
| 最近记录: |