library
library datatype
Description
What a library of functions written in Scilab language is made of?
Such a library is made of a directory containing
- an editable XML file always named
lib
. This file contains- the name of the library
- the list of names of public functions belonging to the library.
genlib(..)
. It can't be made by hand. - a set of binary files named with the
.bin
extension, whose basenames are the names of functions possibly registered in thelib
file. - and possibly -- but it's not mandatory to load and use the library --, the
.sci
sources files written in Scilab language, whose compilation withgenlib(..)
has generated thelib
and.bin
files.When thefoo.sci
source file of a foo() function is not provided in the library's directory,edit foo
won't be able to edit its Scilab code, and will open a empty file from scratch.
Loading / declaring a library in the session:
load("/path/to/lib")
then loads the targeted library in the
Scilab session: a variable whose name is the library's name -- say
libname
-- is created. Its dedicated type(libname)
is 14. Its typeof(libname)
is "library"
. This
library's handle contains
- the path to the library's root directory
- the list of public functions names belonging to the library.
Both parts can be retrieved with either the libraryinfo() or the string() functions.
Example: interpolationlib
is a native Scilab library:
--> 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\"
Autoloading when first calling a function:
When the name of a function -- say foo()
-- belonging
to the library is called in the session, Scilab does the following:
- Is
foo
the name of a builtin function? If so, this builtin is called. Otherwise, - Is
foo
the name of a local variable, possibly the required foo() (provided that it has been already called)? If so, this variable is used. Otherwise, - All loaded libraries are scanned -- in anti-alphabetical order of libraries names --
for the searched foo(). The first found is then "loaded" from its
.bin
file, and finally called. Next calls to foo() will then go up to the step #2 that will be successful, unless thefoo
handle has been cleared in the meantime.
Without the step #3, a user's function not belonging to any library and that would be cleared can not be automatically retrieved.
If the foo.sci file is modified while foo() has been already
called, then recompiling and reloading its library won't update the current
foo() behavior: foo() being already known, Scilab will stop at the step #2,
without reloading the updated library, and will use the former foo().
Entering clear foo before the next call to foo(..)
will force Scilab going up to the step #3 during the next call, and so
load and use the updated foo(). |
Homonymous functions in distinct libraries: libname.foo()
If several loaded libraries have a foo() public function, the anti-alphabetical priority
can be unrelevant. Fortunately, it is always
possible to force to use the instance of a given library, with the dot-name's resolution
syntax:
libname.foo(..)
will call the foo() instance belonging to the
libname
library.
Examples
interpolationlib
is a native Scilab library:
interpolationlib //displays the contents of the library type(interpolationlib) [typeof(interpolationlib), typeof(interpolationlib, "overload")] string(interpolationlib) [fnames, libpath] = libraryinfo("interpolationlib")
The output is illustrated in the above Description section.
Handling calls of homonymous functions:
whereis(blanks) clear blanks, isdef("blanks","l") blanks(20) // loads blanks() and calls it isdef("blanks","l") // It stays in the workspace // 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" clear blanks ascii(mylib.blanks(3,%t)) // forced call to mylib.blanks() blanks(3) // Next call is with the default 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 = " "
See also
- 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 — builds a library from a set of *.sci files defining functions in a given directory
- libraryinfo — マクロとscilabライブラリのパスを取得
- string — 文字列に変換
- whereis — Returns the name of the loaded library/module a given function belongs to
- librarieslist — scilabライブラリを取得
History
バージョン | 記述 |
6.0.0 |
|
Report an issue | ||
<< Lambda functions | types | matrices >> |