Как передать переменные в компоненты в определении маршрута

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

В качестве фона first и last на диапазон, предназначенные для указания индексов, которые вы получите при повторении этого диапазона. Напротив, low и high определяют минимальные и максимальные индексы, определяющие диапазон.

  • Для простого диапазона, например 1..10, first и low будут то же самое, оценивая значение 1, в то время как last и high будут оценивать значение 10
  • . То, как вы повторяете диапазон в обратном порядке в Часовне, - это использовать отрицательный шаг, например 1..10 by -1. Для этого диапазона low и high по-прежнему будут 1 и 10 соответственно, но first будет 10, а last будет 1, так как диапазон представляет целые числа 10, 9 , 8, ..., 1.
  • Часовня также поддерживает не-единицы шаги, и они также могут привести к различиям. Например, для диапазона 1..10 by 2, low и high будут по-прежнему быть 1 и 10 соответственно, а first по-прежнему будет 1, но last будет 9, так как этот диапазон только представляет нечетные значения от 1 до 10.

Следующая программа демонстрирует эти случаи вместе с 1..10 by -2, которые я оставлю в качестве упражнения для читателя (вы также можете попробуйте в Интернете (TIO) ):

proc printBounds(r) {
  writeln("For range ", r, ":");
  writeln("  first = ", r.first);
  writeln("  last  = ", r.last);
  writeln("  low   = ", r.low);
  writeln("  high  = ", r.high);
  writeln();
}

printBounds(1..10);
printBounds(1..10 by -1);
printBounds(1..10 by 2);
printBounds(1..10 by -2);

Плотные прямоугольные домены определяются с использованием диапазона для измерения. Такие запросы, как low, high, first и last в таких областях, возвращают кортеж значений, по одному на измерение, соответствующий результатам запросов в соответствующих диапазонах. В качестве примера, вот 4D-домен, определенный в терминах диапазонов выше ( TIO ):

const D = {1..10, 1..10 by -1, 1..10 by 2, 1..10 by -2};

writeln("low   = ", D.low);
writeln("high  = ", D.high);
writeln("first = ", D.first);
writeln("last  = ", D.last);

0
задан AppDreamer 18 January 2019 в 21:22
поделиться