【问题标题】:F# Implementing Interface, Multiple Parameters, getting error this override takes a different number ofF#实现接口,多个参数,出现错误,此覆盖需要不同数量的
【发布时间】:2011-05-06 02:13:46
【问题描述】:

我在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

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

【问题讨论】:

    标签: .net visual-studio-2010 f# .net-3.5 .net-4.0


    【解决方案1】:

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

    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 版本不适用于 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-12
      • 1970-01-01
      • 1970-01-01
      • 2016-09-15
      • 2020-06-28
      相关资源
      最近更新 更多