2016-12-14 2 views
0

Есть ли способ определить переменную в основной функции и использовать ее во всех подфункциях. enter image description hereОпределите переменную и используйте ее во всех подфункциях на Matlab

Я попытался объявить переменные как global, но, похоже, я должен повторить его во всех функциях снова. Мне интересно, какая польза от глобальной переменной?

использование переменной в качестве global:

main program 
global x 
syms x 
subfunc1 
subfunc2 
... 

и

subfunc1 
global x 

и

subfunc2 
global x 

(может быть, этот формат напоминает нам, чтобы иметь глобальную переменную в функции, но это было лучше, чтобы вызвать ошибка, если мы используем одно и то же имя переменной в функции, такую ​​же, как ключевые слова Matlab) Я не хочу импортировать переменную как все аргументы функции и не хочу объявлять эту переменную во всех функциях снова и снова. любая помощь будет оценена.

+6

передать его как argumeeeeent! Использование глобальных переменных - ужасная идея. Нагрузки функций MATLAB будут использовать переменную с именем «x» внутри них, и вы будете каждый раз переписывать 'x' каждый раз, когда это произойдет! –

ответ

0

Одна вещь, которую вы можете сделать, это определить другие функции как подфункции основной функции. Что-то, как показано ниже

Оба функций subFunc1 и subFunc2 должны иметь доступ к данным вы определяете над ним в mainFunc

function mainFunc() 
variable1 = 'stuff'; 
variable2 = 5; 
    function subFunc1() 
     %do stuff 
    end 

    function subFunc2() 
     %do more stuff 
    end 
end 

Edit 1

Конечно, вы можете определить глобальные данные mainFunc, который используется в подфункциях, но я бы не рекомендовал это делать, поскольку он может быть изменен неожиданными способами, которые вы не собираетесь выполнять.

1

Если вы действительно хотите иметь доступ к одной и той же переменной, то в Matlab есть только два способа: вложенные функции (описываемые с помощью ответа от @ justthom8) и глобальные переменные. Существуют и другие методы получения данных в функции, такие как getappdata, guidata и (мои личные любимые :) аргументы функции передачи. Однако эти подходы делают копии переменных.

Возможно, вы должны спросить себя, почему вы хотите избежать копирования переменных. Если вас беспокоит производительность, вы должны знать, что Matlab эффективно использует переменные в качестве ссылки только на данные, поэтому вы можете безопасно отправлять переменную в функцию (тем самым копируя переменную) без копирования фактических данных. его первый после того, как вы измените данные внутри функции, которые фактически копируются данными. Все это совершенно невидимо для нас, кроме как возможное падение производительности во время многого копирования. Это называется copy-on-write.

Глобальные переменные могут be used to optimize Matlabs performance, кодируя их таким образом, чтобы избежать копирования данных, но на самом деле требуется знание того, что вы делаете, и это открывает множество ошибок, особенно если ваши проекты растут по размеру ,

Смежные вопросы