Функции и операции в 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
.