永远不会匹配此规则:为什么?
This rule will never be matched: Why?
我有以下功能:
let hasColumnValue<'columnType> columnName (value: 'columnType) (row: KeyValuePair<int, ObjectSeries<string>>) =
let columnValue =
Series.get columnName row.Value :?> 'columnType
match columnValue with
| value -> true
| _ -> false
默认模式匹配被标记为“永远不会匹配此规则”
=> 我不明白为什么
提前致谢
原因是您无法对值进行模式匹配,因此第一种情况可以作为包罗万象的方式。我建议用 columnValue = value
.
替换整个匹配表达式
第一个模式始终匹配,因为它绑定到变量。如果存在具有相同名称的变量,它将被隐藏。但是,如果 name 指的是 literal 绑定,那么当 value 等于基础常量 value
时模式成功
let x = 1
[<Literal>]
let Three = 3
match 2 with
| Three -> printfn "Three"
| x -> printfn "%d" x
// prints 2
match 3 with
| Three -> printfn "Three"
| x -> printfn "%d" x
// prints Three
在你的情况下,使用相等而不是模式匹配是最清楚的
let hasColumnValue<'columnType when 'columnType: equality> columnName (value: 'columnType) (row: KeyValuePair<int, ObjectSeries<string>>) =
let columnValue =
Series.get columnName row.Value :?> 'columnType
columnValue = value
我有以下功能:
let hasColumnValue<'columnType> columnName (value: 'columnType) (row: KeyValuePair<int, ObjectSeries<string>>) =
let columnValue =
Series.get columnName row.Value :?> 'columnType
match columnValue with
| value -> true
| _ -> false
默认模式匹配被标记为“永远不会匹配此规则”
=> 我不明白为什么
提前致谢
原因是您无法对值进行模式匹配,因此第一种情况可以作为包罗万象的方式。我建议用 columnValue = value
.
第一个模式始终匹配,因为它绑定到变量。如果存在具有相同名称的变量,它将被隐藏。但是,如果 name 指的是 literal 绑定,那么当 value 等于基础常量 value
时模式成功let x = 1
[<Literal>]
let Three = 3
match 2 with
| Three -> printfn "Three"
| x -> printfn "%d" x
// prints 2
match 3 with
| Three -> printfn "Three"
| x -> printfn "%d" x
// prints Three
在你的情况下,使用相等而不是模式匹配是最清楚的
let hasColumnValue<'columnType when 'columnType: equality> columnName (value: 'columnType) (row: KeyValuePair<int, ObjectSeries<string>>) =
let columnValue =
Series.get columnName row.Value :?> 'columnType
columnValue = value