В F # я могу использовать сопоставление образцов во множестве мест в синтаксисе.Как разрушить аргумент конструктора?
Например:
// Given this type...
type SingleCaseUnion = | SingleCaseUnion of int
/// ...I can do this:
let destructureInFunc (SingleCaseUnion n) =
printfn "%d" n
// ...and this:
type DestructureInMethod() =
member t.M(SingleCaseUnion n) =
printfn "%d" n
Но я не могу работать, как это сделать:
type DestructureInCtor(SingleCaseUnion n) =
do printfn "%d" n
// type DestructureInCtor(SingleCaseUnion n) =
// ---------------------------------------^
//
// stdin(3,40): error FS0010: Unexpected identifier in type definition. Expected ')' or other token.
У меня есть синтаксис неправильно, или же F # не поддерживает шаблон согласования в параметрах конструктора ? не
Хотя это не работает для * первичных * конструкторов, другие (вторичные) конструкторы позволяют это. * (reposted как комментарий, так как мой ответ стал излишним.) * – Vandroiy