为什么我在 F# 的匹配语句中收到 'value unused' 警告
Why am I getting a 'value unused' warning, in a match statement, in F#
我有以下代码:
try
let s = orderId.Split('|')
match (s.[0], s.[1]) with
| "G", coreGuid -> OrderClass.Grid
| "C", coreGuid -> OrderClass.Close
| _, _ -> OrderClass.External
with _ ->
OrderClass.External
它接受一个"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
但是我的 IDE(Rider 2020.1 MacOs)给我这个警告:
我不明白为什么?
这是因为在模式部分,变量正在捕获匹配的值。这意味着无论 s.[1]
的值是什么,它都将绑定到名称 coreGuid
,因此它可以在右侧使用。 IDE 让您知道没有在任何地方使用它。
这是一条有用的错误消息,因为您的代码没有达到您的预期。它忽略了 s.[1]
的值。每当一个变量出现在一个模式中,就意味着该字段可以有任何值。
我认为这应该会如您所愿:
| "G", g when g = coreGuid -> OrderClass.Grid
我有以下代码:
try
let s = orderId.Split('|')
match (s.[0], s.[1]) with
| "G", coreGuid -> OrderClass.Grid
| "C", coreGuid -> OrderClass.Close
| _, _ -> OrderClass.External
with _ ->
OrderClass.External
它接受一个"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
但是我的 IDE(Rider 2020.1 MacOs)给我这个警告:
我不明白为什么?
这是因为在模式部分,变量正在捕获匹配的值。这意味着无论 s.[1]
的值是什么,它都将绑定到名称 coreGuid
,因此它可以在右侧使用。 IDE 让您知道没有在任何地方使用它。
这是一条有用的错误消息,因为您的代码没有达到您的预期。它忽略了 s.[1]
的值。每当一个变量出现在一个模式中,就意味着该字段可以有任何值。
我认为这应该会如您所愿:
| "G", g when g = coreGuid -> OrderClass.Grid