generics - 如何在 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。
解决方案
通过为接口类型提供类型参数,使您的接口显式通用:
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 = []
推荐阅读
- r - R中带有ordinalNet的累积惩罚序数模型的残差
- java - 编写重试机制打印日志
- python - 如何从 groupby() 输出生成数据帧
- java - “org.json.simple.JSONArray 不能转换为 org.json.simple.JSONObject”
- swift - 内容更改时SwiftUI ScrollView太小
- r - 在函数中指定变量的准则
- java - 在 Java AWT 中将图像添加到 BorderLayout
- python - 为什么python不能连接字符串和int
- javascript - str.split() 在每个字母处分割,而不是在分隔符处
- javascript - 如何使我的引导表单响应?