Hello Chin Luh,

Le 04/12/2020 à 01:57, Chin Luh Tan a écrit :
Hi all,

Stephane, Thanks for the quick  examples to illustrate this.

Claus, as shown by Stephane, this could be now by ourselves now from our own modules. Stephane has illustrated a quick demo on this, while the one I was testing with is the copy of toolbox skeleton inside the Scilab contrib, modified to 2 modules, installed with atoms and let it load at start, results are the same.

There are 2 potential issues which we should take notes:
1. The module which is loaded last, will have the "dominant" in the base function.

Are you sure about this? This was the rule with Scilab 5, but the removal of the variables stack changed it within Scilab 6. I noticed with Scilab 6.0 that the libraries are scanned for the required function only after sorting their names in anti-alphabetical order. So if both alib.myfunc() and zlib.myfunc() exist, myfunc() will call zlib.myfunc(), whatever is the loading order of alib and zlib.

On this respect, neither the https://help.scilab.org/docs/6.1.0/en_US/library.html page is up-to-date, not other pages dealing with libraries, like the genlib().
Here is the test:

File  =  TMPDIR+"\test\";
mkdir(File+"alib");
mkdir(File+"zlib");

code  =  [  "function test()"  ;  "disp(""test from alib"")"  ;  "endfunction"];
mputl(code,  File+"alib\test.sci");
genlib("alib",  File+"alib");

code  =  [  "function test()"  ;  "disp(""test from zlib"")"  ;  "endfunction"];
mputl(code,  File+"zlib\test.sci");
genlib("zlib",  File+"zlib");

clear  alib  zlib
load(File+"zlib\lib")
load(File+"alib\lib")

test() --> test() "test from zlib"

for e.g.: the example that Stephane showed, we could call "lib1.foo" and "lib2.foo", and calling just "foo" will be the same as  "lib2.foo". 2. Only macros function could be called this way, if a module has a scilab gateway that called direct from Scilab, (such as scicv), you could not call scicvlib.imread as the imread is directly expose from the C lib to Scilab.

This is true only if the homonymous function is called without specifying its library. Otherwise, the name resolution works:

File  =  TMPDIR+"\test\";
mkdir(File+"alib");
code  =  [  "function cos(a)"  ;  "disp(""cos() from alib"")"  ;  
"endfunction"];
mputl(code,  File+"alib\cos.sci");
genlib("alib",  File+"alib");
clear  alib
load(File+"alib\lib") cos(1)
alib.cos(1)

--> cos(1)
 ans  =
   0.5403023

--> alib.cos(1)
  "cos() from alib"

Best regards
Samuel

_______________________________________________
users mailing list
[email protected]
http://lists.scilab.org/mailman/listinfo/users

Reply via email to