F#:实现内联方法(On Inteface)以避免使用实际类型

Pro*_*ool 1 f# inline

我正在尝试查看内联是否可以应用于已实现的方法,以便不必拼写输入的特定类型.我用一个off(Not inherited/implemented)方法完成了这个,但是尝试使用一个接口.

type public IBookInteraction = 
  abstract inline CreateBook : 'a -> MethodResult<BasicBookModel>


type public BookInteraction(?userInteraction) =

  interface IBookInteraction with

  member inline x.CreateBook(bookModel) =
    let userId = (^a : (member UserId : Int32 with get) (bookModel))

    MethodResult<BasicBookModel>()
Run Code Online (Sandbox Code Playgroud)

我猜测有一种方法可以做到这一点,但它不适用于接口方法签名中的泛型运算符(?).

kvb*_*kvb 6

我不相信有可能有抽象的内联方法.即使你可以,你的代码也行不通,因为你的接口定义承诺用户可以用任何代码调用它'a,但是你的实现会'a在一个假设的世界中放置一个静态成员约束--F#支持抽象内联方法,声明接口上的方法也需要包含约束.

无论如何,要了解为什么F#不可能支持抽象内联方法,请考虑一下inline:为实现该方法而编写的代码将基本上被复制并粘贴到调用站点中.但是,使用抽象方法,您不知道定义方法实现的具体类型,因此无法在编译时弄清楚您应该内联的代码是什么!