MATLAB - несколько возвращаемых значений из функции?

45

Я пишу 2 функции в matlab, функцию инициализации и функцию для вставки элементов в массив, рассматривающий его как двусвязный список. Однако моя функция инициализации возвращает только "ans =" и инициализированный массив. Как я могу установить значение других переменных? Здесь мой код:

function [ array, listp, freep ] = initialize( size )
    array = zeros(size, 3);
    listp = 0;
    freep = 1;
end
  • 1
    У Python это тоже есть. Кроме того, он имеет NumPy, SciPy и многое другое;)
  • 4
    @ Ник, пожалуйста, отметьте правильный ответ как правильный ..... Прошло 2 года, парень заслуживает того, чтобы его ответ был принят
Теги:
return-value

4 ответа

73

Matlab позволяет вам возвращать несколько значений, а также получать их в строке.

Когда вы вызываете его, получайте отдельные переменные inline:

[array, listp, freep] = initialize(size)
  • 1
    хм, я думал, что попробовал это, и это не сработало, но я забыл скобки. Спасибо!
  • 32
    Кроме того, если у вас есть выходная переменная функции, которая вам не нужна, но более поздние, которые вы делаете, символ ~ не будет тратить память на ненужную переменную. Например, [array,~,freep]=initialize(size) (только в R2009b и более поздних версиях.)
Показать ещё 2 комментария
0

Я думаю, что Octave возвращает только одно значение, которое является первым возвращаемым значением, в вашем случае "array".

И Octave напечатайте его как "ans".

Другие, 'listp', 'freep' не были напечатаны.

Потому что он появился внутри функции.

Попробуйте следующее:

[ A, B, C] = initialize( 4 )

И "массив", "listp", "freep" будут печататься как A, B и C.

-2

Используйте в функции, которую вы вызовете, и она будет работать нормально.

     [a b c] = yourfunction(optional)
     %your code
     a = 5;
     b = 7;
     c = 10;
     return
     end

Это способ вызова функции как из другой функции, так и из командной строки

     [aa bb cc] = yourfunction(optional);

Переменные aa, bb и cc теперь содержат возвращаемые переменные.

  • 0
    Это ничего не добавляет.
-2

Измените функцию, в которой вы получите один результат: результат = [массив, listp, freep]. Таким образом, отображается только один результат.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню