7
votes

Différence entre les structures MATLAB vides et tous les éléments S (:)

Ma question est la suivante: Quelle est la différence entre s et s (:) si s est une structure vide.

Je crois qu'il y a une différence parce que de cette question: Ajout d'un champ à une structure vide

Exemple d'illustration minimal: xxx

L'erreur donnée:

une structure de nom de point est illégale lorsque la structure est vide. Utilisez un indice sur le structure.


0 commentaires

3 Réponses :


7
votes

En fait, voici un autre étrange pour vous:

%# careful MATLAB will crash and your session will be lost!
S = struct();
S = setfield(S, {}, 'g', {}, 0)


3 commentaires

Joli! En outre, je confirme la faute SEG sur R2012b et R2012a


Je viens de l'essayer sur Matlab 2014b et il se bloque toujours. Amusement.


N'écrase plus sur 2015b et 2016b.



4
votes

[S (:). b] = transaction (0) est équivalent à [S (1: fin) .b] = transaction (0) , lequel Développe à [S (1: numel (s)). B] = transaction (0) ou, dans votre cas particulier [S (1: 0) .b] = 0) . Ainsi, vous ne traitez pas d'aucun des éléments de la structure, que je m'attendais à travailler, même si je le trouve encore quelque peu surprenant que cela ajouterait un champ B . Peut-être que c'est cette étrangeté particulière, que vous ne pouvez accéder que par le biais de la spécification explicite explicitement de la liste des champs, qui est capturé par l'erreur.

Notez que si vous souhaitez créer une structure vide avec champ B , vous pouvez alternativement écrire xxx

si cela donne une structure 0x0.


0 commentaires

0
votes

En réalité la différence entre s et s (:) s'applique aux structures en général, non seulement pour vider les structures.

Une raison pour laquelle cela pourrait être le cas, c'est parce que cela vous permet de choisir si vous souhaitez accéder à la structure ou à son contenu.

Un exemple pratique serait l'affectation de [] afin de supprimer quelque chose: xxx

s < / code> est maintenant une structure vide, mais contiendrait toujours tous les champs qu'il avait auparavant.

t d'autre part, est maintenant simplement devenu la matrice vide [] .

Les deux actions font ce que vous attendez, et cela ne serait pas possible sans la distinction entre une structure et tous ses éléments.


1 commentaires

Lors de la vérification de la façon dont cela généraliste, j'ai couru dans ceci: Stackoverflow.com/questions/18959702/...