Le problème avec ce programme est que la chapelle ne sait pas que NumSuch
est le nom d'un module par opposition à un enregistrement, classe, ou faute de frappe. Par conséquent, il ne va pas chercher dans votre chemin de recherche de module. La solution est de faire savoir à Chapel qu'il existe un module nommé NumSuch
:
L'une des façons de le faire est d'utiliser une instruction use
(ceci indique qu'il existe un module avec le nom donné et provoquera la recherche du compilateur pour cela s'il ne l'a pas déjà trouvé). Vous pouvez éviter la pollution de l'espace de noms que vous espériez en utilisant des filtres qui causent pas de symboles à être visible dans le cadre de la déclaration use
:
use NumSuch only ; // only make this (empty) list of symbols available
ou:
use NumSuch except *; // make all symbols available except for `*` (all of them)
Après une ou l'autre de ces déclarations , votre appel devrait fonctionner:
NumSuch.buildFromSparseMatrix(...);
et un appel non qualifié ne doit pas puisque aucun symbole ont été mis à la disposition par le use
:
buildFromSparseMatrix(...);
Vous pouvez même mettre la déclaration use
dans un autre champ qui provoquerait le compilateur d'aller chercher le module, trouver, sachez qu'il ya un module avec ce nom, et de limiter la pollution de l'espace de noms à cette portée (bien que je considère que ce stylistiquement pire par rapport à la précédente, plus idiomatiques, approches):
{
use NumSuch; // causes the compiler to go looking for module NumSuch; limits namespace pollution to this scope...
}
NumSuch.buildFromSparseMatrix(...);
Une deuxième façon de le faire est de lister le fichier source NumSuch.chpl
explicitement sur la ligne de commande chpl
. Par défaut, tous les fichiers source nommés sur la ligne de commande sont analysés et leurs modules sont connus du compilateur.