2015-12-02 5 views
3

Внутри функции я хочу сделать assignin(ws, 'var', val), но на данный момент я не знаю рабочего пространства ws, которое в настоящее время отображается в окне рабочей области внутри окна Matlab. Я ищу заявление, которое заменяет мой ws в заявлении выше.MATLAB - получить текущее рабочее пространство

Возможно, это простой и часто задаваемый вопрос, но я не нашел ответа.

+5

С [документация] (http://www.mathworks.com/help/matlab/ref/assignin.html): 'WS может иметь значение«базы»или«вызывающей»для обозначения Базовое рабочее пространство MATLAB® или рабочее пространство вызывающей функции. ' – excaza

+1

Почему вы хотите это сделать? – Dan

+0

@Dan, @ user2271770 для тех, кто спрашивает, почему это может понадобиться: имена переменных переменных могут быть одной из причин. 'varName = 'myVar'; ...; eval (VarName) = 1' не присваивает 'myVar' ничего. Напротив, 'assignin ('here', varName, 1)' будет решением. Что касается 'eval ([VarName '= 1']), я никогда не хотел бы включать много потенциально неизвестных вещей в eval (инъекционные атаки). – bers

ответ

4

Что вам нужно, это сделать assignin в текущем рабочем пространстве. Но это тривиально в MATLAB, потому что является основным назначение:

var = val; 

Два других доступных рабочих пространств с помощью параметра ws являются:

  • 'base', который является основой для работы (все скрипты создавать в нем свои переменные);

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

+0

@excaza Я согласен, что это может создать путаницу через ключевое слово 'global', которое не создает переменную в базовой рабочей области. Я исправлю ответ. –

+0

«Но это тривиально в MATLAB, потому что это основное назначение:« Это предложение путается из-за грамматики. Кроме того, 'var = val;' не присваивает var в рабочей области, если вызвано внутри функции. – drmuelr

+1

@drmuelr Извините за грамматику; Я не мог выразить это более четко. Что касается другой заметки, я прошу различать: 'var = val;' * будет * присваивать переменную 'var' в текущем рабочем пространстве (созданную вызовом функции и уничтожен, как только функция завершается). Правда, он не будет присваивать эту переменную в базовом рабочем пространстве. Вот несколько соображений по этой теме, если вы путаете рабочее пространство * функции * с базовым рабочим пространством *: http://www.mathworks.com/help/matlab/matlab_prog/base-and-function-workspaces.html –

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