F# 为什么在F中的匹配语句中会出现“value unused”警告
我有以下代码:F# 为什么在F中的匹配语句中会出现“value unused”警告,f#,rider,F#,Rider,我有以下代码: try let s = orderId.Split('|') match (s.[0], s.[1]) with | "G", coreGuid -> OrderClass.Grid | "C", coreGuid -> OrderClass.Close | _, _ -> OrderClass.External with _ ->
try
let s = orderId.Split('|')
match (s.[0], s.[1]) with
| "G", coreGuid -> OrderClass.Grid
| "C", coreGuid -> OrderClass.Close
| _, _ -> OrderClass.External
with _ ->
OrderClass.External
它采用字母| 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
这是因为在模式部分中,变量正在捕获匹配的值。这意味着无论s.[1]的值是什么,它都将绑定到名称coreGuid,以便在右侧使用。IDE让您知道您在任何地方都不使用它 这是一条有用的错误消息,因为您的代码没有达到预期的效果。它正在忽略s[1]的值。每当一个变量出现在模式中时,这意味着该字段可以有任何值 我认为这应该像你期望的那样起作用:
| "G", g when g = coreGuid -> OrderClass.Grid
好的,我明白了;我感到困惑的是,如果我的匹配是| G,例如1,它会起作用,对吗?但如果我不放一个常数,而是一个现有的场,它被一个捕捉马赫值的临时变量所遮蔽,对吗;我感到困惑的是,如果我的匹配是| G,例如1,它会起作用,对吗?但是如果我不放一个常数,而是一个现有的字段,它会被一个临时变量所遮蔽,这个临时变量捕捉马赫值,对吗?如果字符串格式允许,你也可以匹配一个特定长度的数组;当G=coreGuid->时,将orderId.Split“|”与|[| G;G |]匹配。如果字符串格式允许,还可以匹配特定长度的数组;当G=coreGuid->时,将orderId.Split“|”与|[| G;G |]匹配。。。