assignin

Присвойте значение переменной в заданной рабочей области

Синтаксис

Описание

пример

assignin(ws,var,val) присваивает значение val к переменной var в рабочей области ws. Например, assignin('base','x',42) присваивает значение 42 переменной x в MATLAB® базовое рабочее пространство.

Если val требует оценки, MATLAB выполняет ее в функции, которая вызывает assignin, не в рабочей области задан ws. Если val указатель на функцию, это должно быть evaluable в функции, которая вызывает assignin.

assignin функция полезна для этих задач:

  • Экспортирование данных от функции до базового рабочего пространства.

  • Из функции, изменяя значение переменной, которая задана в рабочей области функции вызывающей стороны. Например, можно изменить значение переменной в списке аргументов функции вызова.

Примеры

свернуть все

В файле в вашей текущей рабочей папке создайте функцию, которая добавляет два числа и затем присваивает значение переменной fcnStatus в базовом рабочем пространстве.

function c = myAdd(a,b)
    c = a+b;
    
    str = sprintf('%s called with %d,%d (%s)',mfilename,a,b,char(datetime));
    assignin('base','fcnStatus',str)
end

В командной строке вызовите функцию.

n = myAdd(2,3)
n =

     5

Просмотрите значение fcnStatus переменная, что myAdd функция присвоена в базовом рабочем пространстве.

fcnStatus
fcnStatus =

    'myAdd called with 2,3 (17-Nov-2017 14:56:14)'

В файле в вашей текущей рабочей папке создайте функцию, которая отображает диалоговое окно, чтобы ввести имя и год рождения и вычисляет возраст в году 2050. assignin функционируйте экспортирует значения в переменные name рабочего пространства MATLAB и age2050.

function mydialog
    prompt = {'Enter name:','Enter birth year:'};
    answer = inputdlg(prompt);
    
    n = answer{1};
    birthyear = str2double(answer{2});
    a = 2050-birthyear;
    
    assignin('base','name',n);
    assignin('base','age2050',a);
end

В командной строке запустите функцию, введите данные и нажмите ОК.

mydialog

Просмотрите экспортируемые значения в браузере Рабочей области.

Создайте функцию, которая изменяет входной возраст в 42. Вызов assignin в localfcn изменяет значение a в рабочей области основной функции, updateAge.

function updateAge(a)
    validateattributes(a,{'numeric'},{'scalar'})
    fprintf('\tYour age: %d\n',a)
    localfcn
    fprintf('\tYour updated age: %d\n',a)
end

function localfcn
    assignin('caller','a',42)
end

В командной строке вызовите основную функцию.

updateAge(37)
	Your age: 37
	Your updated age: 42

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

В файле в вашей текущей рабочей папке создайте функцию, которая находит минимальное значение случайного массива. assignfh локальная функция присваивает указатель на функцию fh в рабочую область minRand. minRand функция оценивает fh с входом n.

function m = minRand(n)
    assignfh
    
    A = fh(n)
    m = min(A(:));
end

function assignfh
    fh = @(dim)rand(dim);
    assignin('caller','fh',fh)
end

Вызовите функцию с входным значением 2.

m = minRand(2)
A =

    0.3486    0.1423
    0.0419    0.0766


m =

    0.0419

Указатель на функцию оценивает к массиву 2 на 2 случайных чисел.

Создайте другую версию функции, вызванной minRand2, в котором локальная функция заменяет rand функция в определении указателя на функцию.

Подобно minRand пример, assignfh2 локальная функция присваивает fh в рабочую область minRand2. assignfh2 функционируйте заменяет rand функция в ее рабочей области с переменной под названием rand и создает указатель на функцию. Это поведение сопоставимо с анонимными функциями – указатель на функцию создается с помощью переменных, доступных в то время, когда вы создаете его. Поэтому оценка указателя на функцию в minRand2 результаты в n индексация в rand массив задан в assignfh2.

function m = minRand2(n)
    assignfh2(n)
    
    A = fh(n)
    m = min(A(:));
end

function assignfh2(n)
    rand = 13*ones(n);
    fh = @(dim)rand(dim);
    assignin('caller','fh',fh)
end

Вызовите функцию с входным значением 2.

m = minRand2(2)
A =

    13


m =

    13

При присвоении анонимной функции рабочей области вызывающей стороны MATLAB помещает определение указателя на функцию в переменной в рабочей области вызывающей стороны. Функция с вызовом assignin оценивает указатель на функцию. В то время как этот пример описывает, как присвоить переменную в рабочую область вызывающей стороны, лучшая практика должна иметь локальную функцию assignfh возвратите указатель на функцию как выходной аргумент.

Входные параметры

свернуть все

Рабочая область в виде 'base' или 'caller'.

Чтобы присвоить значения в базовом рабочем пространстве MATLAB, используйте 'base'. Базовое рабочее пространство хранит переменные, которые вы создаете в командной строке MATLAB, включая любые переменные, которые скрипты создают, принимая, что вы запускаете скрипт из командной строки или из Редактора.

Чтобы присвоить переменные в рабочей области функции вызывающей стороны, используйте 'caller'. Рабочая область вызывающей стороны является рабочей областью функции, которая вызвала в настоящее время рабочую функцию. Например, примите тот funA вызовы funB. Рабочая область вызывающей стороны funB funA. Поэтому от funB, можно присвоить значение переменной в funA использование assignin и определение рабочей области как 'caller'.

Примечание

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

Основа и рабочие области вызывающей стороны эквивалентны в следующих случаях:

  • Вы вызываете функцию в командной строке и основных вызовах функции assignin.

  • Вы вызываете assignin в командной строке.

Типы данных: char | string

Имя переменной в виде вектора символов или строкового скаляра. Если var не существует в заданной рабочей области, assignin функция создает его.

Типы данных: char | string

Значение переменной в виде скаляра или значение массивов. val может иметь любой тип данных и может включать выражения MATLAB.

Если значение переменной требует оценки, MATLAB выполняет выражение в функции, которая содержит вызов assignin, не в рабочей области задан ws. Если val указатель на функцию, это должно быть evaluable в функции, которая вызывает assignin.

Пример 5

Пример: 'hello'

Пример: rand(3,7)

Пример: @cos

Советы

  • assignin функция не присваивает значения определенным элементам массива. Поэтому var не может содержать индексы массива. Этот код приводит к ошибке.

    X = 1:8;
    assignin('base','X(3:5)',-1);
    

    Чтобы присвоить значения определенным элементам массива, используйте evalin функция.

    evalin('base','X(3:5) = -1')
    

Представлено до R2006a