WikiDer > Справка: переключение функции синтаксического анализатора - Википедия
Эта справочная страница является практическое руководство. В нем подробно описаны процессы или процедуры некоторых аспектов норм и практики Википедии. Это не один из Политика или рекомендации Википедии, и может отражать разные уровни консенсус и проверка. |
В переключить функцию парсера, кодируется как "#выключатель", выбирает первую подходящую ветвь в списке вариантов, действуя как заявление о случае.
Каждая ветка может быть ценить, выражение (расчет) или шаблон вызов,[1] оценивается и сравнивается, чтобы соответствовать значению переключателя. Хотя многие структуры #switch используются для перехода между простым набором значений, ветви также могут включать логические выражения действовать как набор предварительных условий для тестирования, пока один из них не проверит их истинность, действуя как if-elseif-elseif-elseif-еще структура. Значение переключателя сравнивается как строка символов, а не число, поэтому "5" не будет соответствовать "5.00", если не будет сравниваться с "{{#expr: {{{1 | 5.00}}} & nbsp;}}" (= "5")
.
#Switch может содержать более 1000 ветвей, но для большей скорости его следует разделить так, чтобы было меньше 100 ветвей в каждой из нескольких или вложенных частей. Верхние ветви выполняются быстрее, а нижние ветви должны ждать сравнения всех более высоких ветвей. Потому что это функция парсера, #switch может использоваться на любой странице, даже в тексте статьи, но в большинстве случаев #switch обычно используется внутри шаблон, чтобы ветвиться в зависимости от параметр значение, переданное в шаблон.
Общий формат
В #выключатель функция может быть однострочной формой:
{{#выключатель: {{{Икс}}} | 1 = один | 2 = два | 3 | 4 | 5 = диапазон 3–5 | другое}}
Эта однострочная #выключатель прочитал бы значение {{{Икс}}}. Для значения 1 он вернет «один». Для значения 2 будет возвращено «два». Для значений 3, 4 или 5 будет возвращен «диапазон 3–5». Для любого другого значения или нулевого значения он вернет «другое».
Однако во многих случаях #выключатель Функция - это многострочная форма, каждая ветвь которой находится на отдельной строке, как показано ниже:
{{#выключатель: {{{Икс}}} | 1 = один | 2 = два | #default = other | 3 | 4 | 5 = любое из 3–5 | {{#expr: 2 * 3}} = шесть | {{#expr: 2 * 3 + 1}} = {{lc: SEVEN}} <!--lowercase ->}}
Это иллюстрирует альтернативный метод указания регистра по умолчанию, который может быть первым, последним или где-то между ними.
Если значение по умолчанию не указано и ни один регистр не соответствует указанному значению, возвращается значение NULL.
Для каждой ветви #выключатель, любая сторона знака равенства «=» может быть простым значением, выражением или вызовом шаблона.
Использование переключателей как if-elseif-elseif
Функция #switch может быть структурирована как набор предварительных условий, которые проверяются до тех пор, пока одно из них не станет истинным (равным «1»). Например, чтобы предварительно просмотреть числа, чтобы избежать деления на ноль, в формуле: '"` UNIQ - postMath-00000001-QINU` "':
{{#switch: 1
| {{#ifeq: {{{x2 | none}}} | none | 1 | 0}} = Параметр x2 не имеет данных.
| {{#ifeq: {{{y2 | none}}} | none | 1 | 0}} = Параметр y2 не имеет данных.
| {{#expr: {{{x2}}} = 0}} = Параметр x2 равен 0 - нельзя делить.
| {{#expr: {{{y2}}} = 0}} = Параметр y2 равен 0 - нельзя делить.
| 1 = {{#expr: {{{x}}} / {{{x2}}} + {{{y}}} / {{{y2}}}}}
}}
При тестировании x2 и y2, если любой из них равен нулю (нету), то #switch заканчивается предупреждающим сообщением, а не вычисляет средневзвешенное двух величин x, y, с x2 и y2. Каждая ветвь действует как предварительное условие, поэтому вся структура #switch работает как эквивалент if-elseif-elseif-elseif-еще, даже если в структуре # if-function не может быть предложения elseif. Обратите внимание на два типа сравниваемых данных:
- Алфавитные данные: Строку альфа-символов можно сравнить в
#выключатель
используя#ifeq:
следующим образом: {{#ifeq: {{{x2 | none}}} | none | 1 | 0}},
где результат будет «1», если истина, или «0», если ложь. - Числовые данные: Некоторые цифры можно сравнить в
#выключатель
используя#expr:
следующим образом: {{#expr: {{{y2}}} = 0}} или {{#expr: {{{x}}} <41500}},
где каждый результат будет «1», если истина, или «0», если ложь.
Другой пример, чтобы проверить количество «n» для определения количества десятичных цифр:
{{#switch: 1
| {{#expr: floor ({{{n}}} * 100) <> {{{n}}} * 100}} = 3
| {{#expr: floor ({{{n}}} * 10) <> {{{n}}} * 10}} = 2
| {{#expr: floor ({{{n}}}) <> {{{n}}}}} = 1
| {{#expr: {{{n}}} mod 1000 = 0}} = −3
| {{#expr: {{{n}}} mod 100 = 0}} = −2
| {{#expr: {{{n}}} mod 10 = 0}} = −1
| 1 = 0
}}
Это еще один пример использования "#switch: 1" для суммирования набора предварительных условий, которые последовательно проверяются, пока одно из них не станет истинным (равным "1").
Соображения производительности
#Switch может содержать более 1000–2000 ветвей, но должен быть разделен, чтобы иметь менее 100 ветвей, на несколько или вложенных частей. В некоторых случаях можно разделить на несколько структур #switch, например, когда во многих случаях используется одна и та же первая буква. Затем с помощью {{padleft: | 1 | {{{value}}}}} можно извлечь первую букву {{{value}}} для использования в более высоком #switch, который разветвляется на наиболее частую букву, за которой следует все остальные внизу или в ветке "#default". Другим распространенным разделением может быть разделение числовых значений на частые диапазоны, за которыми следуют все остальные.
Верхние ветви #switch выполняются быстрее, а нижние ветви должны ждать сравнения всех более высоких ветвей. Следовательно, верхняя ветвь должна быть наиболее часто используемым случаем, если предварительная проверка данных не выполняется в ранних ветвях.
Смотрите также
- Википедия: функция парсера
- Справка: условные выражения
- Оператор отношения
- Справка: Magic_words # Variables
- ^ А вызов шаблона (также известен как тег шаблона) имеет две фигурные скобки по обе стороны от имени страницы шаблона и не включает префикс «Шаблон:». Ошибка Lua в модуле: Template_link_general в строке 111: попытка конкатенации локального titlePart (нулевое значение). тоже работает, но "Шаблон:" не нужен. Результат "
{{...}}
".