【发布时间】:2016-02-12 11:37:59
【问题描述】:
我有一个名为 Token 的基本抽象类和一些子类型,例如 NumToken,StrToken。
我想将他们的实例放在同一个列表中。
我无法声明变量使用let l = list<'a when 'a :> Token>
然后,我写
let extractToken<'a when 'a :> Token>(lineNum:int, line:string) : 'a list option =
let mutable result : 'a list = []
它可以工作,但不能添加元素。result <- new NumToken(lineNum, value) :: result 只是说它需要'a 但这里是NumToken
现在我可以使用new NumToken(lineNum, value) :> Token 并声明Token list。
它工作但看起来很难看(我知道 fsharp 不会自动向上转换..)。
list<_ :> Token> 也不起作用,它只接受一种子类型。
谢谢帮助。
【问题讨论】:
标签: f#