gpt4 book ai didi

c# - 在 F# 中使用 C# 流利库

转载 作者:太空狗 更新时间:2023-10-29 23:00:26 24 4
gpt4 key购买 nike

我正在尝试使用 FluentValidation F Sharp 示例中的库。但是我被卡住了,因为我什至无法将简单的 C Sharp 代码转换为 F Sharp 代码。

但后来我认为这个很棒的库只是试图将编程方面的功能位带到 CSharp 中,所以与其使用它,我应该只在 FSharp 中创建我自己的库。这将是简单和适当的方式。

所以,我需要一个意见,哪种方式会更好。如果有人可以为此创建 FSharp 示例,那就太好了。它仅用于学习目的,因为我主要使用 C# 中的流利库。我喜欢在 F# 中与他们一起去。

最佳答案

F# 支持流畅的 DSL,并且有几个具有流畅 API 的 F# 库。 F# 的类型系统与 C# 的有点不同,大多数差异都与流畅的 API 相关,但仍然有效:

#r @"C:\Users\Ramon\Downloads\FluentValidation\FluentValidation\FluentValidation.dll"

open System
open FluentValidation

type Customer =
{ Surname : string
Forename : string
Company : string
Discout : int
Address : string
Postcode : string
Discount : int
HasDiscount : bool }

type IRuleBuilder<'T,'Property> with
member __.Ignore = ()

type CustomerValidator =
inherit AbstractValidator<Customer>

new () =
let beAValidPostcode postcode = true
base.RuleFor(fun customer -> customer.Surname).NotEmpty().Ignore
base.RuleFor(fun customer -> customer.Forename).NotEmpty().WithMessage("Please specify a first name").Ignore
base.RuleFor(fun customer -> customer.Company).NotNull().Ignore
base.RuleFor(fun customer -> customer.Discount).NotEqual(0).When(fun customer -> customer.HasDiscount).Ignore
base.RuleFor(fun customer -> customer.Address).Length(20, 250).Ignore
base.RuleFor(fun customer -> customer.Postcode).Must(beAValidPostcode).WithMessage("Please specify a valid postcode").Ignore
{ }

关于c# - 在 F# 中使用 C# 流利库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15595512/

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