繁体   English   中英

F#实现接口,多个参数,获取错误此覆盖采用不同的数量

[英]F# Implementing Interface, Multiple Parameters, getting error this override takes a different number of

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

[<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

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

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

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)

要修复代码,您需要使实现curried或声明 - tupled。 Curried版本不适用于WCF,因此请考虑使用tupled版本

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM