assignin

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

Синтаксис

Описание

пример

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

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

The 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

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

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 возвращает обновленный возраст в качестве выходного аргумента.

В файле в текущей рабочей папке создайте функцию, которая находит минимальное значение случайного массива. The assignfh локальная функция присваивает указатель на функцию fh в рабочую область minRand. The 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. The 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
Для просмотра документации необходимо авторизоваться на сайте