Switch

Материал из Egghelp.ru - TCL/TK Eggdrop Wiki
Версия от 22:48, 17 декабря 2008; Tvrsh (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

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

СИНТАКСИС

  switch ?options? string pattern body ?pattern body…?
  
  switch ?options? string {pattern body ?pattern body…?}

ОПИСАНИЕ

Команда switch сравнивает аргумент string по очереди с каждым из образцов, заданных аргументами pattern. Если строка string соответствует очередному образцу, выполняется соответствующий скрипт body и команда возвращает результат его выполнения. Если последний из образцов равен default, то ему соответствует любая строка. Если строка не соответствует ни одному из образцов (что значит, в частности, что образец default отсутствует), то никакой скрипт не выполняется и команда возвращает пустое значение.

Если один или несколько первых аргументов команды начинаются с "-", они считаются опциями команды. Возможные опции перечислены ниже.

-exact

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

-glob

При сравнении строки с образцом используются те же правила, что и в команде string match.

-regexp

При сравнении строки с образцом используются те же правила, что и в команде regexp.

--

Обозначает конец опций. Следующий аргумент считается строкой string, даже если он начинается с символа "-".

Команда предполагает использование одной из двух синтаксических форм для задания образцов и скриптов. Первая использует отдельные аргументы для каждого образца и скрипта. Эта форма удобна при необходимости выполнить подстановки в образцах и/или скриптах. Во второй форме все они помещаются в один аргумент, который должен быть списком. Элементами этого списка должны быть, соответственно, образцы и скрипты. Эта форма более удобна для длинных команд, не размещающихся в одной строке, поскольку она не требует использовать обратный слеш в конце каждой строки. Но при ее использовании необходимо учитывать, что, поскольку список содержится в фигурных скобках, подстановки команд и переменных в образцах и скриптах не производятся. Вследствие этого результат выполнения команды, записанной в различных формах, может различаться.

Если один из аргументов body равен "-", это означает, что при совпадении строки с данным образцом будет выполняться скрипт body для следующего образца. Если для следующего образца скрипт также равен "-", то будет использован скрипт для следующего за ним образца и так далее.

Пример

  #Команда
  switch abc a - b {format 1} abc {format 2} default {format 3}
  #вернет значение "2".
  #Команда
  switch -regexp aaab {
      ^a.*b$ -
      b {format 1}
      a* {format 2}
      default {format 3}
  }
  #вернет значение "1".
  #Команда
  switch xyz {
      a -
      b {
          format 1
      }
      a* {
          format 2
      }
      default {
          format 3
      }
  }
  #вернет значение "3".