Почему возвращаемый тип Unit используется для описания операций, которые не имеют возвращаемого значения в Q #;в отличие от пустоты или нет? - PullRequest
0 голосов
/ 27 февраля 2019

Почему Microsoft при создании Q # решила использовать ключевое слово Unit вместо void или none, чтобы описать методы, которые не имеют возвращаемого значения?Есть ли причина для этого, или Microsoft просто хотела сделать что-то другое?

1 Ответ

0 голосов
/ 27 февраля 2019

Функции и операции в Q # всегда являются tuple-in-tuple-out.Вместе с эквивалентностью одноэлементного кортежа (принципом, что 'T и ('T) являются абсолютно одинаковыми типами), это позволяет Q # представлять вещи единообразно, причем каждая функция и операция принимают ровно один вход и возвращают ровно один выход, каждый из которыхявляются кортежами.

Одним из следствий этого подхода является то, что мы можем написать функцию типа Composed<'T, 'U, 'V>(inner : ('T -> 'U), outer : ('U -> 'V)) : ('T -> 'V), уверенную, что мы можем передать любую функцию как inner, не задумываясь о том, сколько аргументов оназанимает.

Чтобы этот дизайн был согласованным, нам нужно, чтобы функция или операция, которая «ничего не возвращала», возвращала пустой кортеж, а не значение вообще.Во многих функциональных языках (включая F #) тип пустого кортежа называется unit или Unit, в соответствии с традиционными обозначениями в теории типов.В Q # мы решили следовать этой традиции, чтобы прояснить различие между значением () и типом Unit.

...