-- Ваша программа окутана, её имя "myprog.exe",
-- и помещена в каталог c:myfiles
-- Пользователь вводит: myprog myfile.dat 12345 "the end"
cmd = command_line()
-- cmd будет равно:
{"C:MYFILESMYPROG.EXE",
"C:MYFILESMYPROG.EXE", -- заполнитель места
"myfile.dat",
"12345",
"the end"
}
-- Заметьте, что все аргументы остались теми же, что и в примере 1,
-- исключая первые два. Второй аргумент теперь повторяет первый,
-- и служит просто для того, чтобы сохранить постоянной нумерацию
-- остальных аргументов, независимо от того, имеет ваша программа
-- форму .exe, или нет.
См. также:
getenv
compare
Синтаксис:
i = compare(x1, x2)
Описание:
Выдаёт 0, если объекты x1 и x2 идентичны, 1, если x1 больше чем x2, -1, если x1 меньше чем x2. Считается, что атомы меньше рядов. Ряды сравниваются поэлементно, начиная с первого элемента, до момента, пока не найдено первое различие.
Пример 1:
x = compare({1,2,{3,{4}},5}, {2-1,1+1,{3,{4}},6-1})
-- идентичны, x равно 0
Пример 2:
if compare("ABC", "ABCD") < 0 then -- -1
-- результатом будет истина: ряд ABC считается "меньшим", так как он короче
end if
Пример 3:
x = compare({12345, 99999, -1, 700, 2},
{12345, 99999, -1, 699, 3, 0})
-- x будет равно 1, так как 700 699
Пример 4:
x = compare('a', "a")
-- x будет равно -1, так как 'a' является атомом,
-- в то время как "a" является рядом длины 1
См. также:
equal, операции сравнения, операции на рядах
cos
Синтаксис:
x2 = cos(x1)
Описание:
Вычисляет и выдаёт косинус x1, где x1 выражено в радианах.
Комментарии:
Данная функция применима к атомам или ко всем элементам ряда.
Пример:
x = cos({.5, .6, .7})
-- x равно {0.8775826, 0.8253356, 0.7648422}
См. также:
sin, tan, log, sqrt
crash_file
Синтаксис:
include machine.e
crash_file(s)
Описание:
Задаёт представленное в виде ряда s имя файла, предназначенного для вывода диагностической информации, когда Euphoria вынуждена аварийно остановить вашу программу из-за ошибки, обнаруженной во время компиляции или во время работы.
Комментарии:
Обычно Euphoria печатает диагностическое сообщение вроде "syntax error" или "divide by zero" на экране, одновременно выводя отладочную информацию в файл ex.err, который всегда располагается в текущем каталоге.
Вызывая crash_file(), вы можете управлять именами файла и каталога, в которых будет записываться отладочная информация.
Ряд s может быть пустым, т.е. "". В этом случае диагностическая или отладочная информация не будет выводиться ни на экран, ни в файл. Ряд s может также иметь форму "NUL" или "/dev/null", в этом случае диагностическая информация будет выводиться на экран, но в файл ex.err ничего не будет записано.
Вы можете вызывать crash_file() столько раз, сколько это нужно, в различных частях вашей программы. В случае таких многократных вызовов будет использоваться тот файл, который был задан в последней команде crash_file(), стоящей перед точкой возникновения ошибки .
Пример:
crash_file("\tmp\mybug")
См. также:
abort, crash_message, crash_routine, отладка и профилирование
crash_message
Синтаксис:
include machine.e
crash_message(s)
Описание:
Задаёт сообщение, представленное в виде ряда s, которое будет выведено на экран в случае, если Euphoria аварийно остановит вашу программу из-за ошибки, обнаруженной во время работы.
Комментарии:
Обычно Euphoria печатает диагностическое сообщение на экране, например, "subscript out of bounds" (индекс вне границ) или "divide by zero" (деление на ноль), сопровождая его распечаткой отладочной информации в файле ex.err. Эти сообщения об ошибках будут малопонятны для тех ваших пользователей, которые сами не являются программистами Euphoria. Но вызывая crash_message(), вы сможете управлять содержимым сообщений, появляющихся на экране, чтобы наиболее полно учесть уровень понимания аварийной ситуации пользователями вашей программы. При этом вся отладочная информация будет ещё и распечатываться в файле ex.err, так что вы не потеряете никаких данных об ошибке, пользуясь этой дополнительной возможностью и подправляя стандартные сообщения.
Ряд s может содержать 'n', символы новой строки, поэтому ваше сообщение легко сделать исчерпывающе подробным, причем на вашем родном языке, а не на английском, на котором Euphoria выводит свои собственные сообщения. Перед выводом вашего сообщения Euphoria переключит экран в текстовый режим и начнет печать с верхней строки чистого экрана.
Вы можете вызывать crash_message() столько раз из различных участков вашей программы, сколько это необходимо. Будет выведено только одно сообщение, то, которое задано последним перед точкой возникновения ошибки.
Пример:
crash_message("Произошла неизвестная ранее ошибка!n" &
"Свяжитесь с [email protected]n" &
"Не удаляйте файл "ex.err".n")
См. также:
abort, crash_file, crash_routine, отладка и профилирование
crash_routine
Синтаксис:
include machine.e
crash_routine(i)
Описание:
Задаёт номер аварийной функции, которая, по вашему замыслу, должна быть вызвана Euphoria в случае обнаружения ошибки, из-за которой работа вашей программы прервалась бы с аварийным сообщением. Ваша аварийная функция должна иметь один аргумент типа object. Этот аргумент в настоящее время автоматически всегда равен 0 (рассматривается возможность наличия в будущих выпусках Euphoria и более содержательных аргументов). Вы можете вызывать crash_routine много раз с различными аварийными функциями. В момент, когда Euphoria должна была бы прервать вашу программу, будет вызвана та ваша аварийная функция, которая задана в самой последней команде crash_routine(), а затем начнётся отработка всей цепочки аварийных функций по направлению к вызванной в первой команде crash_routine(). Обычно каждая из предусмотренных аварийных функций должна выдавать 0. Если любая из функций этой цепочки выдаст не-нулевую величину, цепочка вызовов будет немедленно прервана, а программа завершена с сообщением об аварийной остановке (авосте).
Комментарии:
Определяя аварийные функции, вы даёте своей программе шанс отреагировать на фатальные ошибки (такие, например, как индекс вне границ), возникающие во время её работы, наиболее безопасным для ваших данных способом. Вы можете записать некоторые критичные данные на диск. Вы можете проинформировать пользователя о том, что случилось и что он должен в первую очередь сделать. Вы можете также записать ключевую отладочную информацию. Фактически, когда ваша аварийная функция вызвана, файл ex.err уже будет записан. Ваша функция может перезаписать ex.err ещё где-то, или даже открыть его и извлечь из него необходимую информацию, например, сообщение об ошибке.
Команда crash_routine() может использоваться с интерпретатором или транслятором. Транслированный код не выполняет широкую проверку ошибок во время работы программы и не обеспечивает полную распечатку в ex.err, но исключения машинного уровня фиксируются, и crash_routine() дает вам превосходную возможность записать некоторые переменные на диск для использования при дальнейшей отладке.
Разработчику библиотеки может понадобиться вызов crash_routine() в библиотеке. Это позволит более упорядоченно обращаться с данными, закрывая файлы, отпирая запертые файлы, высвобождая ресурсы и т.п. Но разработчик главной программы может иметь и свои собственные crash_routine(). И все аварийные функции будут отработаны Euphoria, если первая вызванная (последняя назначенная) и все последующие выдадут 0.
Аварийная функция не может продолжить исполнение программы из точки останова, исправив ошибку. Но других ограничений на то, что она может делать, практически не существует. Она не может и не должна возвращаться вспять по программе, но она может перезапустить эту программу, например, с откорректированными аргументами командной строки.
Если во время исполнения аварийной функции случится другая ошибка, снова вызывается распечатка отладочной информации, но имя файла в этом случае будет уже ex_crash.err, а не ex.err. С этого момента запрещаются любые новые вызовы аврийных функций, а вы остаётесь наедине с ex.err и ex_crash.err, чтобы с ними в руках попытаться найти причину всех несчастий.
Пример:
function crash(object x)
-- в случае пожара ...
-- (под Linux) отправить сообщение e-mail, содержащее файл ex.err
system("mail -s "crash!" [email protected] < ex.err > /dev/null", 2)
return 0
end function
crash_routine(routine_id("crash"))
См. также:
abort, crash_file, crash_message, отладка и профилирование
current_dir
Синтаксис:
include file.e
s = current_dir()
Описание:
Выдаёт имя текущего рабочего каталога (директории, папки, фолдера).