Please note that the recommended version of Scilab is 2026.0.0. This page might be outdated.
See the recommended documentation of this function
library
тип данных библиотеки
Описание
Из чего сделана библиотека функций, написанных на языке Scilab?
Такая библиотека сделана из директории, содержащей
- редактируемый XML-файл, который всегда называется
lib. Этот файл содержит- имя библиотеки;
- список имён публичных функций, принадлежащих библиотеке.
genlib(..). Его нельзя сделать вручную. - набор двоичных файлов с расширением
.bin, чьи основные имена являются именами функций возможно зарегистрированных в файлеlib, - и возможно -- но это необязательно для загрузки и использования
библиотеки --,
.sci-файлы исходников, написанные на языке Scilab, чья компиляция с помощьюgenlib(..)генерирует файлыlibи.bin.
Если файл-исходникfoo.sciфункцииfoo()не предоставлен в директории библиотеки, тоedit fooне может править его Scilab-код и откроет пустой файл с нуля.
Загрузка / декларирование библиотеки в сессии:
load("/path/to/lib") загружает предназначенную библиотеку
в сессию Scilab: создаётся переменная, чьё имя является именем библиотеки
-- скажем libname. Относящийся к ней тип
type(libname) равен 14. Её typeof(libname)
соответствует "library". Этот дескриптор библиотеки содержит
- путь к корневой директории библиотеки;
- список имён публичных функций, принадлежащих библиотеке.
Обе части могут быть получены либо с помощью функции libraryinfo(),
либо с помощью функции string().
Пример: interpolationlib является родной библиотекой Scilab:
--> interpolationlib
interpolationlib =
Functions files location : SCI\modules\interpolation\macros\.
interp1 mesh2d interpln smooth
--> type(interpolationlib)
ans =
14.
--> [typeof(interpolationlib), typeof(interpolationlib, "overload")]
ans =
"library" "f"
--> string(interpolationlib)
ans =
"SCI\modules\interpolation\macros\"
"interp1"
"mesh2d"
"interpln"
"smooth"
--> [fnames, libpath] = libraryinfo("interpolationlib")
fnames =
"interp1"
"mesh2d"
"interpln"
"smooth"
libpath =
"SCI\modules\interpolation\macros\"
Автозагрузка при первом вызове функции:
Если имя функции -- скажем, foo() -- принадлежащей
библиотеке, вызвана в сессии, то Scilab делает следующее:
- Является ли
fooименем встроенной функции? Если так, то эта встроенная функция вызывается. В противном случае, - Является ли
fooименем локальной переменной, возможно требуемойfoo()(предполагая, что она уже была вызвана)? Если так, то используется эта переменная. В противном случае, - Сканируются все загруженные библиотеки -- в обратном алфавитному порядку имён
библиотек -- для поиска
foo(). Первая найденная "загружается" из её.bin-файла и, наконец, вызывается. Следующие вызовыfoo()будут переходить к шагу №2, который будет успешным, пока дескрипторfooне будет удалён по ходу дела.
Без шага №3 пользовательская функция, не принадлежащая ни к одной библиотеке и поэтому в случае удаления не может быть автоматически восстановлена.
![]() | Если файл foo.sci изменён, когда foo()
уже была вызвана, то перекомпиляция и перегрузка её библиотеки не обновит
текущее поведение foo(): foo(),
является уже известной, поэтому Scilab остановится на шаге №2 без
перегрузки обновлённой библиотеки и будет использовать прежнюю
foo(). Введение clear foo перед
следующим вызовом foo() заставит Scilab перейти
к шагу №3 во время следующего вызова и таким образом загрузит и будет
использовать обновлённую foo(). |
Одноимённые функции в разных библиотеках: libname.foo()
Если несколько загруженных библиотек имеют публичную функцию
foo(), то обратный алфавитный приоритет может быть
неуместным. К счастью, всегда можно заставить использовать содержимое
указанной библиотеки с помощью синтаксиса разделения точкой:
libname.foo(..) будет вызывать содержимое
foo(), принадлежащее библиотеке libname.
Примеры
interpolationlib является родной библиотекой Scilab:
interpolationlib //отображает содержимое библиотеки type(interpolationlib) [typeof(interpolationlib), typeof(interpolationlib, "overload")] string(interpolationlib) [fnames, libpath] = libraryinfo("interpolationlib")
Вывод иллюстрируется в разделе Описание выше.
Вызовы обработки одноимённых функций:
whereis(blanks) clear blanks, isdef("blanks","l") blanks(20) // загрузка blanks() и её вызов isdef("blanks","l") // она остаётся в workspace // Построение библиотеки с нашей собственной одноимённой функцией blanks() libDir = fullfile(TMPDIR, "mylib"); code = ["function r = blanks(n, nbsp)" " if nbsp, r = part(ascii(160),ones(1,n))," " else r = ""ABC""," " end" "endfunction" ]; mkdir(libDir); mputl(code, libDir + filesep() + "blanks.sci"); genlib("mylib", libDir); // Компиляция нашей собственной библиотеки clear blanks ascii(blanks(3)) // вызывается stringlib.blanks() ⇐ "stringlib" > "mylib" clear blanks ascii(mylib.blanks(3,%t)) // принудительный вызов mylib.blanks() blanks(3) // следующий вызов по умолчанию stringlib.blanks()
--> whereis(blanks)
ans =
"stringlib"
--> clear blanks, isdef("blanks","l")
ans =
F
--> blanks(20) // loads blanks() and calls it
ans =
" "
--> isdef("blanks","l") // It stays in the workspace
ans =
T
--> // Building a library with our own homonymous blanks() function
--> libDir = fullfile(TMPDIR, "mylib");
--> code = ["function r = blanks(n, nbsp)"
> " if nbsp, r = part(ascii(160),ones(1,n)),"
> " else r = ""ABC"","
> " end"
> "endfunction" ];
--> mkdir(libDir);
--> mputl(code, libDir + filesep() + "blanks.sci");
--> genlib("mylib", libDir); // Compiling our own library
--> clear blanks
--> ascii(blanks(3)) // stringlib.blanks() is called ⇐ "stringlib" > "mylib"
ans =
32. 32. 32.
--> clear blanks
--> ascii(mylib.blanks(3,%t)) // forced call to mylib.blanks()
ans =
194. 160. 194. 160. 194. 160.
--> blanks(3) // Next call is with the default stringlib.blanks()
ans =
" "
Смотрите также
- load — Loads some archived variables, a saved graphic figure, a library of functions
- lib — loads a library of Scilab functions and variables, and sets its name
- genlib — строит библиотеку из набора *.sci-файлов, определяющих функции в указанной директории
- libraryinfo — получает путь и устанавливает главные функции загруженной библиотеки
- string — преобразование в строку
- whereis — Returns the name of the loaded library/module a given function belongs to
- librarieslist — gets the list of loaded Scilab libraries
История
| Версия | Описание |
| 6.0.0 |
|
| Report an issue | ||
| << hypermatrices | types | матрицы >> |