Книга проверки соединения

В этом документе показаны способы использования проверок соединения .

Примеры значений

Когда вы определяете проверки соединений для входов и выходов, обычно вам следует думать о проверках как о представлении типов.

Проверки входов должны включать каждый «тип», который они принимают, а проверки выходов должны включать именно то, что они «возвращают».

Принять один тип

В самом простом случае, когда вы хотите создать блок, который «принимает» или «возвращает» один тип, вам необходимо включить этот тип в проверку соединения соединения.

блок значений, который принимает один тип

Принять несколько типов

Чтобы создать блок, который «принимает» несколько типов, вам необходимо включить каждый принятый тип во входную проверку соединения.

блок значений, который принимает несколько типов

По соглашению, если выходные данные иногда могут быть приняты в нескольких ситуациях (например, если вы разрешаете иногда использовать числа в качестве строк), выходные данные должны быть более ограничительными, а входные данные должны быть более разрешающими. Это соглашение гарантирует, что выходы не подключаются там, где они не поддерживаются.

Примите любой тип

Чтобы создать блок, который «принимает» любой тип, вам нужно установить проверку соединения входа на null .

блок значений, который принимает любой тип

Подтипы возврата

Чтобы создать блок, который «возвращает» подтип, вам необходимо включить и тип, и супертип в проверку соединения вывода.

блок значений, который возвращает его тип и супертип

В случае с подтипами можно иметь несколько проверок при проверке вывода, поскольку блок всегда «возвращает» оба типа.

Возвращать параметризованные типы

Чтобы создать блок, который «возвращает» параметризованный тип, вам необходимо включить как параметризованную, так и непараметризованную версию в проверку выходного соединения.

В зависимости от того, насколько строгим вы хотите, чтобы ваш язык блоков был, вы также можете включить дисперсию(и) типа.

блок значений, который возвращает его параметризованный тип и его непараметризованный тип. тип

Как и в случае с подтипами, в этом случае можно иметь несколько проверок при проверке вывода, потому что блок всегда «возвращает» оба типа.

Примеры стека или операторов

Существует несколько распространенных способов, которыми разработчики определяют проверки предыдущих и следующих соединений. Обычно вы думаете об этом как об ограничении порядка блоков.

Следующие соединения должны включать информацию о том, какие блоки должны следовать за текущим, а предыдущие соединения должны включать информацию о том, что представляет собой текущий блок.

Держите блоки в порядке

Чтобы создать набор блоков, которые соединяются в определенном порядке, вам необходимо указать, какие блоки должны следовать за текущим при следующей проверке соединения и что представляет собой текущий блок при предыдущей проверке соединения.

блоки операторов с принудительным порядком

Разрешить много средних блоков

Чтобы создать набор упорядоченных блоков, допускающий множество средних блоков, вам необходимо включить хотя бы одну запись из предыдущей проверки соединения среднего блока в следующую проверку соединения среднего блока. Это позволяет за блоком следовать самому себе.

блоки операторов, допускающие множество средних блоков

Не разрешать средние блоки

Чтобы создать набор упорядоченных блоков, где средние блоки являются необязательными, вам необходимо включить по крайней мере одну запись как из предыдущей проверки соединения среднего блока, так и из предыдущей проверки соединения последнего блока в следующую проверку соединения первого блока. Это позволяет после первого блока следовать либо среднему блоку, либо последнему блоку.

блоки операторов, которые не допускают средних блоков

Либо-или складывается

Чтобы создать блок, за которым могут следовать только блоки из одной группы или блоки из другой (а не оба), вам нужно сделать две вещи:

  1. Вам необходимо включить хотя бы одну запись из обеих групп предыдущих проверок соединения в следующую проверку соединения первого блока.

  2. Вам необходимо определить следующие проверки соединения групп, чтобы они включали только значения, которые были в их предыдущих проверках соединения (чтобы за ними могли следовать только блоки той же группы).

блоки операторов, за которыми может следовать несколько блоков одного типа, или кратно другому, но не обоим