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
.binextension, whose basenames are the names of functions possibly registered in the
- and possibly -- but it's not mandatory to load and use the library --, the
.scisources files written in Scilab language, whose compilation with
genlib(..)has generated the
foo.scisource file of a foo() function is not provided in the library's directory,
edit foowon'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
is 14. Its
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.
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:
foothe name of a builtin function? If so, this builtin is called. Otherwise,
foothe 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
.binfile, and finally called. Next calls to foo() will then go up to the step #2 that will be successful, unless the
foohandle 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.
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
libname.foo(..) will call the foo() instance belonging to the
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 = " "
- 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 — gets the path and the set of primary functions of a loaded library
- string — conversion en chaîne de caractères
- whereis — Returns the name of the loaded library/module a given function belongs to
- librarieslist — gets the list of loaded Scilab libraries
|Report an issue|
|<< hypermatrices||types||matrices >>|