вернуть тип who_user в scilab - PullRequest
       7

вернуть тип who_user в scilab

1 голос
/ 30 октября 2010

Я работаю со scilab, но во время проекта scilab имеет дело с большим количеством переменных. Мне было интересно, могу ли я сделать следующее

var_list = who_user();
for _var_ = var_list do
  if _var_ is global then
    writetofile(human_readablefile, _var_)
  end
end
clear()

конечно, это псевдокод, и у меня есть несколько вопросов, прежде чем я его реализую.

  1. Я не могу заставить работать var_list = who_user (). поэтому я считаю, что функция не возвращает ничего. Я не хочу взламывать код самого макроса who_user. Есть ли другой способ получить список пользовательских переменных в другой переменной?

  2. Есть ли способ найти из них глобальные переменные?

  3. Если нет, то каковы некоторые методы управления памятью в scilab?

1 Ответ

1 голос
/ 02 ноября 2010

Я могу ответить на ваш первый запрос:

Из небольшой модификации самой функции who_user:

function nams = who_user1()
  //get user variables
  [nams,mem]=who('get'); //get all variables
  p=predef(); //number of system variable
  st=stacksize()
  nams=nams(1:$-p+1);mem=mem(1:$-p+1);
  //modifiable system variables
  excluded=['demolist','scicos_pal','%scicos_menu',..
    '%scicos_short','%helps','%helps_modules','MSDOS','who_user','%scicos_display_mode', ...
      '%scicos_help'];
  ke=grep(nams,excluded)
  nams(ke)=[];mem(ke)=[];

  n=size(nams,1);
  if n==0 then return,end

  //format names on n*10 characters
  ll=length(nams)+2;m=int((ll-1)/10)+1;
  for k=1:max(m)
    ks=find(m==k);
    if ks<>[] then nams(ks)=part(nams(ks),1:(k*10));end
  end
endfunction

Эта функция должна дать вам список, который вы хотите (я изменил имя на who_user1).

Вы можете узнать, является ли конкретная переменная глобальной или нет, используя функцию isglobal (), но вам нужно передать переменную в isglobal (), а не строку, которая является именем переменной. Функция, которую я перечислил выше, возвращает вектор строк.

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

...