Lel*_*tch 8 inheritance f# type-providers
我设计了一个简单的类型提供程序,它根据我的参数提供类型.我想知道是否可以定义将继承另一个ProvideTypeDefinition的ProvidedTypeDefinitions?
我知道我可以做以下事情:
type People() = class end
type Student() =
inherit People()
type Teacher() =
inherit People()
Run Code Online (Sandbox Code Playgroud)
然后我可以使用Type Test Pattern进行模式匹配:
let f (x:People) =
match x with
| :? Student -> "Student"
| :? Teacher -> "Teacher"
| _ -> "Nothing !!"
Run Code Online (Sandbox Code Playgroud)
我想在我的Type提供程序中做的是创建继承另一个ProvideTypeDefinition的ProvidedTypeDefinitions.这样当我使用类型提供程序生成这些类型时,我可以对它们进行模式匹配(例如,我知道在运行时,其中一种类型将被实例化,但我不知道哪一种除了它是ProvideTypeDefinitions之一).
感谢您的时间!
小智 1
尝试使用可区分联合来进行模式匹配而不是继承
type Occupation =
| Student
| Teacher
type People(occupation) =
member this.Occupation = occupation
class end
type Student() =
inherit People(Student)
type Teacher() =
inherit People(Teacher)
let findPerson (person : People) =
match person.Occupation with
| Student -> "Student"
| Teacher -> "Teacher"
Run Code Online (Sandbox Code Playgroud)
由于向上转型和向下转型,我个人喜欢避免在 fsharp 中使用对象继承。例如,
let person = new Student() :> People
findPerson person
Run Code Online (Sandbox Code Playgroud)
相反,我建议摆脱学生和教师解析,让人们处理职业逻辑。
type Occupation =
| Student
| Teacher
type People(occupation) =
member this.Occupation = occupation
class end
let findPerson (person : People) =
match person.Occupation with
| Student -> "Student"
| Teacher -> "Teacher"
People Student
|> findPerson
|> printfn "%s"
Run Code Online (Sandbox Code Playgroud)