Как поместить структуру в структуру - PullRequest
1 голос
/ 01 февраля 2012

Я только начал использовать Matlab, и я абсолютно презираю (или неправильно понимаю) систему типов (или ее отсутствие).

Почему это не работает? Я просто хочу структуры внутри структур (в рекурсивной функции)

    K>> d = struct('op',1,'kids',[])

    d = 

          op: 1
        kids: []

    K>> d.kids(1) = struct('op',2)
    Conversion to double from struct is not possible.

Я пробовал другие вещи, такие как создание d=struct('op',1,'kids', struct([])), но, похоже, ничего не работает ....

Ответы [ 3 ]

8 голосов
/ 01 февраля 2012

Когда вы индексируете его с помощью (1), вы пытаетесь присвоить структуру первому элементу d.kids, который уже является массивом double и, таким образом, несовпадением типов.Просто назначьте для всего поля.

d.kids = struct('op', 2);

Чтобы инициализировать его структурой, с которой нужно начать, сделайте это, вызвав struct без аргументов, вместо передачи [].

d = struct('op',1, 'kids',struct());

Пока не поддавайся отчаянию и ненависти.Система типов может обрабатывать то, что вы хотите здесь;вы просто делаете основные синтаксические ошибки.Ознакомьтесь с руководством по началу работы с MATLAB, особенно с разделами «Матрицы и массивы» и «Программирование», которые можно найти в онлайн-справке (позвоните по номеру doc() из Matlab) или на веб-сайте MathWorks .

1 голос
/ 01 февраля 2012

Вы также можете сделать это более коротким способом:

d.op = 1;
d.kids.op = 2;
1 голос
/ 01 февраля 2012

Вам не нужен индекс для второй команды.

d.kids = struct('op',2) 

Ваше начальное значение [] не делает поле массивом.

РЕДАКТИРОВАТЬ: Эндрю ответ яснее. Я хотел бы добавить, что вы можете использовать команду class, чтобы спросить у Matlab о типе выражения, если вы не уверены.

...