gpt4 book ai didi

.net - F#实现接口(interface),多个参数,出现错误,此覆盖需要不同数量的

转载 作者:行者123 更新时间:2023-12-05 00:39:52 25 4
gpt4 key购买 nike

我在 F# 中定义了以下接口(interface)

[<ServiceContract>]
type ICarRentalService =
[<OperationContract>]
abstract member CalculatePrice: pickupDate:DateTime -> returnDate:DateTime -> pickupLocation:string -> vehiclePreference:string -> float

然后我尝试像这样实现它:
type CarRentalService() =
interface ICarRentalService with
override this.CalculatePrice(pickupDate:DateTime, returnDate:DateTime, pickupLocation:string, vehiclePreference:string) =
5.5

编译时出现以下编译错误:
This override takes a different number of arguments to the corresponding abstract member

我现在正在看东西并摆弄一个小时,我做错了什么?

最佳答案

接口(interface)中的方法以 curried 形式声明,并且您的实现是元组的:
如果简单地说:接口(interface)中的方法是接受一个参数并返回另一个带有剩余参数的函数的函数。在相反的实现中接受所有参数(打包在元组中)

open System
type ICarRentalService =
abstract member CalculatePrice: pickupDate:DateTime -> returnDate:DateTime -> pickupLocation:string -> vehiclePreference:string -> float

let x : ICarRentalService = failwith "not implemented"
let a = x.CalculatePrice // DateTime -> DateTime -> string -> string -> float
let y = a (DateTime.Now) // DateTime -> string -> string -> float (first argument is bound)

要修复代码,您需要使实现柯里化(Currying)或声明 - 元组。 Curried 版本不适用于 WCF,因此请考虑使用元组版本
type ICarRentalService =
abstract member CalculatePrice: pickupDate:DateTime * returnDate:DateTime * pickupLocation:string * vehiclePreference:string -> float

type CarRentalService() =
interface ICarRentalService with
override this.CalculatePrice(pickupDate:DateTime, returnDate:DateTime, pickupLocation:string, vehiclePreference:string) =
5.5

关于.net - F#实现接口(interface),多个参数,出现错误,此覆盖需要不同数量的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4114435/

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