Имена, связанные как с разложенными компонентами различимого объединения, так и с исходным составным значением
Я не могу найти документацию по этому вопросу. Мне нужно разбить значение "Дискриминационный союз" на некоторые его компоненты, но мне также нужно использовать элемент целиком в теле функции.
я могу сделать let matcher = function MyDU(_,b,_) -> b
или же let extractor MyDU(_,b,_) = b
но что, если мне также понадобится ссылка на значение MyDU для чего-то вроде ... -> RedundantWrapper(myDU, b)
Я пробовал:
let extractor myDU =
let MyDU(_,b,_) = myDU
RedundantWrapper(myDU, b)
но я не думаю, что это правильный синтаксис. Возможно, я смогу сделать это как можно дольше, но, похоже, будет короткий путь.
Спасибо!
2 ответа
Решение
Как это:
let (Some(x) as o) = Some 1
// val o : int option = Some 1
// val x : int = 1
Кроме того, я только что понял, что эта короткая комбинация разрешена, и я думаю, что все здесь согласятся, ДОВОЛЬНО УДИВИТЕЛЬНАЯ
let extractor (myDU & MyDU(_,b,_)) =
RedundantWrapper(myDU, b)