【发布时间】:2018-06-05 17:42:01
【问题描述】:
如何将标识符模式的结果复制到 as 模式以制作元组?
我的问题很困惑,所以我创建了一个例子,我想打印这个人的信息,无论是老师还是学生:
type Person =
| Teacher of name: string * age: int * classIds: int list
| Student of name: string
let printTeacher (name, age, classIds) =
printfn "Teacher: %s; Age: %d; Classes: %A" name age classIds
let print = function
| Teacher (name, age, classIds) -> printTeacher (name, age, classIds)
| Student name -> printfn "Student: %s" name
匹配模式长且重复:
| Teacher (name, age, classIds) -> printTeacher (name, age, classIds)
所以我尝试使用as 模式使其更短,但失败了:
| Teacher ((_, _, _) as teacher) -> printTeacher teacher
因为上面的teacher 有Person 类型,而不是string*int*int list。在不更改printTeacher 类型签名string*int*int list -> unit 的情况下,我应该怎么做才能获得更短的模式?
【问题讨论】:
标签: .net f# functional-programming pattern-matching