matlab - ce qui est l'équivalent de la valeur null / Néant / nil / NULL etc.?
Dans la plupart des langages à objets, où les variables peuvent pointer vers des objets, ils peuvent aussi avoir une valeur null, ce qui est très pratique.
Dans Matlab, j'ai une fonction qui analyse une commande, puis renvoie une matrice de cellules, ou false
(qui est égal à zéro, ce qui est un autre modèle commun) si elle échoue:
function re = parse(s)
...
if (invalid)
re = false;
return;
end
end
Le problème est que lorsque je vérifie le résultat, il donne une erreur:
re = parse(s);
if (false == re)
Undefined function 'eq' for input arguments of type 'cell'.
J'ai écrit une fonction pour vérifier une erreur: strcmp('logical', class(re)) && false == re
, mais qui semble être très lent pour une utilisation dans les zones chaudes du code, et aussi gênant si je dois ajouter cette fonction à chaque M fichier que je suis en train d'écrire.
À l'aide de NaN
est encore pire, car en plus de jeter que de l'erreur, ce n'est pas égal à lui-même.
Ce qui est une meilleure alternative pour une utilisation avec ce modèle?
- Pour répondre à une de vos points, idiomatiques matlab est d'utiliser
isnan(A)
pour vérifier nan, plutôt que deA==NaN
(depuis que vous avez découvert, ce dernier ne fonctionne pas). - Ce serait une autre alternative, mais, malheureusement, par exemple
isnan({})
renvoie une erreur.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le
isequal
fonction de comparaison de deux éléments sans causer cette erreur. Par exemple:Une bonne alternative est d'utiliser le tableau vide:
[]
etisempty(re)
à vérifier. Ce n'est pas jeter de l'erreur.Référence: http://www.mathworks.com.au/matlabcentral/newsreader/view_thread/148764
Si vous pouvez changer la fonction
parse
une solution serait de revenir à deux arguments de sortie[re status] = parse(s)
, oùstatus
serait logique variable. Attribuez la valeur true en cas de succès, et false sinon.[]
était un résultat valableparse(..)
.Je voudrais utiliser le vide matrice de cellules de
{}
si ce n'est pas un résultat valide le contraire. À l'aide de vide matrices MATLAB est standard (voir Evgeni Sergeev de réponse), mais en utilisant une cellule vide tableau au lieu d'un vide tableau numérique garantit que vous aurez toujours avec le même type de résultat.Si, d'autre part, la cellule vide de la matrice de
{}
est un résultat valide de votre fonction, puis je utiliser une exception pour signaler un problème:Assurez-vous d'utiliser un ID d'erreur (le premier argument de
error
), de sorte que vous pouvez prendre exactement cette exception lorsque vous appelez la fonction:Je pense que le problème est que les fonctions matlab ne pas renvoyer les pointeurs, mais des copies de valeurs.
À mon humble avis le meilleur, la meilleure approche serait de définir votre propre "pointeur" de la classe. À l'intérieur, vous pouvez définir un "isNull () de la commande" ou même remplacer comparaison pour produire le comportement que vous désirez.