exponenta event banner

назначение

Назначение значения переменной в указанной рабочей области

Синтаксис

Описание

пример

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

Если val требует оценки, MATLAB оценивает ее в функции, которая вызывает assignin, не в рабочей области, указанной ws. Если val является дескриптором функции, он должен быть оценен в функции, которая вызывает 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 функция экспортирует значения в переменные рабочей области MATLAB name и 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 является дескриптором функции, он должен быть оценен в функции, которая вызывает 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