gpt4 book ai didi

F#记录构造函数

转载 作者:行者123 更新时间:2023-12-04 18:41:19 24 4
gpt4 key购买 nike

有没有办法在 F# 中调用 F# 记录类型的构造函数?

我的动机是我一直在使用 FSharpx 的应用验证,但发现自己编写了很多只构造记录的样板函数。

例如,简单的样板文件中的 buildAddress 函数,如果可能的话,我很想摆脱它。

       let buildAddress streetNumber streetLine1 streetLine2 suburb state postcode =
{
Address.StreetNumber = streetNumber
StreetLine1 = streetLine1
StreetLine2 = streetLine2
Suburb = suburb
State = state
Postcode = postcode
}

let validateAddress streetNumber streetLine1 streetLine2 suburb state postcode =
buildAddress
<!> isNumber streetNumber
<*> Success streetLine1
<*> Success streetLine2
<*> Success suburb
<*> Success state
<*> validatePostcode postcode

最佳答案

F# 记录实际上是使用构造函数生成的,但它似乎无法从 F# 代码中获得。 CompilationMapping 属性可能会处理这个问题,因为构造函数本身没有任何属性。

您可以做的是使用标准的 .NET 反射( Activator.CreateInstance )或 FSharp 反射( FSharpValue.MakeRecordFSharpValue.PreComputeRecordConstructor 将获得一个可以使用的函数)访问构造函数。然而,他们所有人都希望将参数作为装箱对象的数组获取,因此它无法与应用验证很好地融合。

我认为您不会得到比现在更清洁的解决方案。

关于F#记录构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25470396/

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