up
previous
next
3.9.4 Package Sourcing and Autoloading
As mentioned above, packages are usually saved in files and then read
into a CoCoA session using the command
Source
(or
<<
).
(I) Full path name, ordinary file sourcing.
package name: $mypackage
file name: this/is/my/stuff.cpkg
Suppose the name of your package is
$mypackage
and is kept in the
file with full pathname
this/is/my/stuff.cpkg
. Then the package can
be loaded into the session as usual with either of the commands:
Source("this/is/my/stuff.cpkg");
<<"this/is/my/stuff.cpkg";
Functions can then be called from the package using the package name,
$mypackage
, as a prefix (or using aliases).
(II) The standard package path,
$
-shortcut.
package name: $mypackage
file name: packages/mypackages/stuff.cpkg (relative to cocoa directory)
A package is in the
standard package path if its file is kept in the
packages directory inside the cocoa directory. Suppose your package has
name
$mypackage
and is kept in the file with pathname (relative to
the cocoa directory)
packages/mypackages/stuff.pkg
. Then the package can
be read by passing this pathname to
Source
, as above, but there are
the following shortcuts:
Source("$mypackages/stuff");
<<"$mypackages/stuff";
<<$mypackages/stuff; -- quotes are optional in this case
In other words, the prefix
$
is taking the place of
packages/
and the
suffix
.cpkg
is (and must be) left off. Functions can then be called
as in the previous case.
(III) Autoloading.
package name: $mypackages/stuff
file name: packages/mypackages/stuff.cpkg (relative to cocoa directory)
Now suppose that the package is in the standard package path, as
above, in the file with pathname (relative to the cocoa directory)
packages/mypackages/stuff.cpkg
. However, now assume that the name of the
package is
$mypackages/stuff
, i.e., that it matches the name of its
file (without
packages/
and
.cpkg
). Then, if any function from the
package is called, say
$mypackages/stuff.MyFunction
, the package
will automatically be loaded. Of course, one may also source the
package using either method I or II, from above.
* Initialize *
NOTE: As explained in the section entitled
"Package Initialization",
below, no matter which method is used to source a package, any
function in the package named
Initialize
will automatically be
executed when the package is loaded.