assignin

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

Синтаксис

assignin(ws,var,val)

Описание

пример

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 и age2050 рабочего пространства MATLAB.

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

Для просмотра документации необходимо авторизоваться на сайте