为什么我在 F# 的匹配语句中收到“值未使用”警告

Tho*_*mas 1 f# rider

我有以下代码:

   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)给了我这个警告:

在此处输入图片说明

我不明白为什么?

Rob*_*let 6

这是因为在模式部分,变量正在捕获匹配的值。这意味着无论 的值s.[1]是什么,它都会绑定到名称,coreGuid因此可以在右侧使用。IDE 让您知道没有在任何地方使用它。

这是一条有用的错误消息,因为您的代码没有按照您的预期运行。它忽略了 的值s.[1]。只要变量出现在模式中,就意味着该字段可以具有任何值。

我认为这应该按您的预期工作:

    | "G", g when g = coreGuid ->  OrderClass.Grid
Run Code Online (Sandbox Code Playgroud)