Перечисление дискриминационного союза - PullRequest
0 голосов
/ 15 января 2019

Я прочитал ответы от Как перечислить дискриминационный союз в F #?

И мне нравится предложенное решение: Решение

Однако я не уверен, как написать функцию, в которой я бы передавал дискриминированное объединение в качестве аргумента?

let testDisUnion a =
    SimpleUnionCaseInfoReflection.AllCases<a> 
    |> Seq.iter (fun (_, instance) -> printfn "name: %s" instance)

Спасибо

1 Ответ

0 голосов
/ 15 января 2019

Вот как использовать аргумент типа, как подсказал dumetrulo:

let testDisUnion<'a> =
    SimpleUnionCaseInfoReflection.AllCases<'a> 
    |> Seq.iter (fun (_, instance) -> printfn "name: %A" instance)

testDisUnion<MyType>
//name: A
//name: B

type MyType = A | B

Аргумент типа <'a> передается из вашей "функции" в AllCases "функцию". Я пишу функцию в кавычках, потому что, хотя нет подходящих параметров, аргумент типа является типом ввода в функцию, что означает, что значение оценивается только тогда, когда вы «вызываете» его с аргументом типа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...