Оценить переменную из функции и назначить новую переменную в базовое рабочее пространство - PullRequest
2 голосов
/ 24 апреля 2020

У меня есть GUI, который принимает введенные пользователем уравнения, такие как delta_P=C1-C2;velocity=diff(y)./diff(x);, в одной строке, разделенной и оканчивающейся на ;. Затем в функции GUI я добавляю C1, C2, x и y, и хочу выполнить оценку для генерации delta_P и velocity и назначить их в базовое рабочее пространство. , Моя проблема в том, что я не знаю delta_P и velocity заблаговременно, так что я не могу просто сделать:

assignin('base','delta_P',C1-C2);

Мне нужно разбить строку, чтобы определить новые имена переменных слева из знаков равенства и присваивать им, что справа от знаков равенства в базовой рабочей области?

Я задаю строку ввода одним или несколькими операторами, чтобы не было пробела и возврата каретки. Затем я попробовал следующее:

str_in = 'delta_P=C1-C2;velocity=diff(y)./diff(x);'
str_sp = strsplit(str_in,';');
str_sp = str_sp(1:end-1); % last ';' results in an empty char

Затем я заблудился:

cellfun(@(c1,c2)assignin('base',c1(1:c2-1),c1(c2+1:end)),str_sp,cellfun(@(c)strfind(c,'='),str_sp,'uni',0),'uni',0);

  1. Это не выглядит эффективным
  2. По-прежнему не работает, поскольку c1 (c2 + 1: end) также является строкой
  3. Я пытался eval(c1(1:c2-1)), но MATLAB жалуется, что C1, C2, x и y не определены .

Спасибо.

1 Ответ

1 голос
/ 24 апреля 2020

Вы должны оценить выражение в текущем рабочем пространстве, а затем присвоить в базовом рабочем пространстве.

Вот пример функции, которая иллюстрирует логи c:

function q61401249
  C1 = 1;
  C2 = 2;
  x = [1 1 2];
  y = [2 3 4];

  str_in = 'delta_P=C1-C2;velocity=diff(y)./diff(x);';
  str_sp = strsplit(str_in,';');
  str_sp = str_sp(1:end-1);

  for i = 1:length(str_sp)
     s = split(str_sp(i),'=');
     assignin('base',s{1},eval(s{2}));
  end
end

когда вы запустите функцию, вы увидите, что в базовом рабочем пространстве созданы две новые переменные, delta_P и velocity по желанию.

Of Конечно, здесь предполагается, что уравнение правильно сформировано, например, что нет двух = знаков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...