首页 > 解决方案 > 如何在 F# 中创建类型参数抽象类型?

问题描述

我想通过以下方式创建一个抽象类型:

type IResource =
    abstract member List    : string -> List<'T>

当我实现它时,我需要一个具体类型而不是 'T(例如 int)。

type Website(stage: string) =
    member this.List    stage = (this :> IResource).List    stage
    interface IResource with
      member this.List    stage = []

是否有可能在 F# 中使用它?如果我在实现中给 List 一个类型,类型检查器会抱怨我使用 int 而不是 'T。

标签: genericstypesf#

解决方案


通过为接口类型提供类型参数,使您的接口显式通用:

type IResource<'T> =
    abstract member List : string -> List<'T>

然后你可以在实现接口时指定类型

type Website(stage: string) =
    member this.List stage = (this :> IResource<int>).List    stage
    interface IResource<int> with
      member this.List stage = []

推荐阅读