[英]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.