gpt4 book ai didi

f# - Record 类型的字符串字段不区分大小写比较

转载 作者:行者123 更新时间:2023-12-01 06:39:37 26 4
gpt4 key购买 nike

有没有办法将 F# 记录类中的字符串字段的比较替换为不区分大小写,而不必完全自定义相等/比较控制?

Subtracting Records from a Set using case-insensitive comparison是我找到的最接近答案的。

最佳答案

如果您想以简洁的方式进行操作,我建议为不区分大小写的字符串引入包装类型。这样,您就可以将不区分大小写的比较概念反射(reflect)在类型中,而不必更改记录上的默认结构比较。

[<CustomEquality; CustomComparison>]
type CIString =
| CI of string
override x.Equals y = ...
override x.GetHashCode() = ...
interface System.IComparable with
member x.CompareTo y = ...

我省略了方法的实现——那里没有什么花哨的东西,只要你访问嵌套字符串时使用 ToUpperInvariant 就可以了。

然后你可以像这样修改你的记录:

type OldRecord = { field : string }
type NewRecord = { field : CIString }

对新类型的比较应该显示 { field = "TEST"} = { field = "test"}.

我建议的另一个解决方案(基于反射)对于一个简单的案例来说很容易实现,但它很狡猾。如果您甚至可以在这里确定“明智的方式”的含义,那么让它在所有可能的情况下以合理的方式工作是一项不平凡的工作。

关于f# - Record 类型的字符串字段不区分大小写比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31926889/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com