Пример 2:
repeat("JOHN", 4) -- {"JOHN", "JOHN", "JOHN", "JOHN"}
-- интерпретатор создаст только одну копию "JOHN"
-- в памяти
См. также:
append, prepend, оператор формирования ряда
reverse
Синтаксис:
include misc.e
s2 = reverse(s1)
Описание:
Оборачивает порядок элементов в ряде.
Комментарии:
Создаётся новый ряд, в котором элементы высшего уровня имеют порядок, обратный по отношению к исходному ряду.
Пример 1:
reverse({1,3,5,7}) -- {7,5,3,1}
Пример 2:
reverse({{1,2,3}, {4,5,6}}) -- {{4,5,6}, {1,2,3}}
Пример 3:
reverse({99}) -- {99}
Пример 4:
reverse({}) -- {}
См. также:
append, prepend, repeat
routine_id
Синтаксис:
i = routine_id(st)
Описание:
Функция выдаёт целое число i, известное как номер (идентификатор) подпрограммы, который присваивается процедуре или функции Euphoria, уже определённой программистом. Имя подпрограммы задаётся символьным рядом st. Если подпрограмма с таким именем ещё не определена, выдаётся -1.
Комментарии:
Полученный с помощью данной функции номер подпрограммы может подаваться в call_proc() или call_func() для непрямого (косвенного) вызова подпрограммы с именем st.
Подпрограмма с именем st должна быть видимой, т.е. доступной для вызова в той точке вашей программы, где вызвана функция routine_id() для получения номера подпрограммы. Непрямые вызовы подпрограмм по неким неизвестным пока их номерам могут появляться в программе ранее собственно определения подпрограмм, но конкретное численное значение каждого номера может быть выработано только после определения конкретной подпрограммы - внимательно просмотрите пример 2 ниже.
Правильный номер подпрограммы, как только ему присвоено конкретное значение, будет работать в любом месте вашей программы при косвенных вызовах подпрограммы по этому её номеру через call_proc() / call_func().
Некоторые типовые применения номеров, вырабатываемых routine_id():
1. Указание на подпрограмму, которая в программе будет определена позже.
2. Создание подпрограммы, которая вызывает другую подпрограмму через численный аргумент - см. Пример 2 ниже.
3. Использование ряда, состоящего из номеров подпрограмм, для создания команды переключения по условиям.
4. Установка объектно-ориентированной системы.
5. Обеспечение работы с call_back() - см. platformr.doc.
Обратите внимание, что функции Си, вызов которых возможен в Euphoria, также имеют свои номера подпрограммы - см. define_c_proc() и define_c_func().
Пример 1:
procedure foo()
puts(1, "Hello World\n")
end procedure
integer foo_num
foo_num = routine_id("foo")
call_proc(foo_num, {}) -- то же самое, что и вызов foo()
Пример 2:
function apply_to_all(sequence s, integer f)
-- функция применяется ко всем элементам ряда
sequence result
result = {}
for i = 1 to length(s) do
-- мы уже можем предусмотреть здесь вызов, например,
-- add1() через некоторый, пока неизвестный, номер f,
-- хотя определение самой add1() и численное значение
-- номера f появятся по ходу программы позже
result = append(result, call_func(f, {s[i]}))
end for
return result
end function
function add1(atom x)
return x + 1
end function
-- функция add1() теперь видна, поэтому мы можем запросить
-- для неё номер подпрограммы, который подаётся затем в
-- ранее определённую функцию apply_to_all(), которая,
-- на момент её определения, ещё ничего "не знала" о функции
-- add1(), но уже предусматривала вызов некой, неизвестной
-- тогда, функции по её номеру f.
? apply_to_all({1, 2, 3}, routine_id("add1"))
-- отображается {2,3,4}
См. также:
call_proc, call_func, call_back, define_c_func, define_c_proc, platformr.doc
...
от S до T
save_bitmap
Синтаксис:
include image.e
i = save_bitmap(s, st)
Описание:
Создаёт bitmap-файл (.bmp) из 2-х элементного ряда s. Ряд st является именем .bmp-файла. s[1] является палитрой:
{{r,g,b}, {r,g,b}, ..., {r,g,b}}
Каждая из величин r, g, или b должна быть в диапазоне от 0 до 255. s[2] является двумерным рядом рядов, содержащих пиксельно-графическое изображение. Ряды, содержащиеся в s[2], должны все иметь одинаковую длину. s имеет тот же самый формат, что и величина, выдаваемая функцией read_bitmap().
Индикатор результата операции i может принимать одно из следующих значений:
global constant BMP_SUCCESS = 0,-- успех операции
BMP_OPEN_FAILED = 1,-- файл не открылся на запись
BMP_INVALID_MODE = 4 -- неверный графический формат
-- или неверный аргумент
Комментарии:
Если вы использовали get_all_palette() для получения палитры перед вызовом этой функции, вы должны умножить величины интенсивностей на 4 перед вызовом save_bitmap().
Вы можете использовать save_image(), чтобы получить двумерный ряд для s[2], содержащий изображение.
Функция save_bitmap() вырабатывает файлы биткарт с 2, 4, 16, или 256 цветами, так что все они могут быть затем прочитаны с помощью read_bitmap(). Программа Paintbrush из пакета Windows и некоторые другие графические редакторы не поддерживают 4-х цветные биткарты.
Пример:
paletteData = get_all_palette() * 4
code = save_bitmap({paletteData, imageData},
"c:\\example\\a1.bmp")
См. также:
save_image, read_bitmap, save_screen, get_all_palette
save_image
Платформа:
DOS32
Синтаксис:
include image.e
s3 = save_image(s1, s2)
Описание:
Переписывает в ряд прямоугольное изображение с пиксельно-графического экрана. Результатом является двумерный ряд рядов, содержащий данные обо всех пикселах изображения. Вы можете затем снова вывести это изображение с использованием процедуры display_image(). Ряд s1 является 2-х элементным рядом {x1,y1}, задающим координаты верхнего левого угла изображения, s2 задаёт {x2,y2} - координаты правого нижнего угла.
Пример:
s = save_image({0,0}, {50,50})
display_image({100,200}, s)
display_image({300,400}, s)
-- записывает в ряд квадратный участок размером 51x51 из верхнего левого угла экрана,
-- а затем выводит его в позиции {100,200} и в позиции {300,400}
См. также:
display_image, save_text_image
save_screen
Платформа:
DOS32
Синтаксис:
include image.e
i = save_screen(x1, st)
Описание:
Сохраняет весь экран или прямоугольную область экрана в файле типа Windows bitmap - .bmp-файле. Чтобы записать в файл весь экран, подайте в функцию 0 для x1. Чтобы записать прямоугольную область экрана, x1 должен быть рядом двух рядов: {{topLeftXPixel, topLeftYPixel}, {bottomRightXPixel, bottomRightYPixel}}, где {topLeftXPixel, topLeftYPixel} равно {Xверхний левый, Yверхний левый}, а {bottomRightXPixel, bottomRightYPixel} равно {Xнижний правый, Yнижний правый}