Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables scilab中who_用户的返回类型_Variables_Memory Management_Pseudocode_Scilab - Fatal编程技术网

Variables scilab中who_用户的返回类型

Variables scilab中who_用户的返回类型,variables,memory-management,pseudocode,scilab,Variables,Memory Management,Pseudocode,Scilab,我与scilab合作,但在项目期间,scilab必须处理大量变量。 我想知道我是否能做到以下几点 var_list = who_user(); for _var_ = var_list do if _var_ is global then writetofile(human_readablefile, _var_) end end clear() 当然,这是一个伪代码,在实现它之前我有几个问题 我无法使var\u list=who\u user()工作。所以我相信这个函数不会返

我与scilab合作,但在项目期间,scilab必须处理大量变量。 我想知道我是否能做到以下几点

var_list = who_user();
for _var_ = var_list do
  if _var_ is global then
    writetofile(human_readablefile, _var_)
  end
end
clear()
当然,这是一个伪代码,在实现它之前我有几个问题

  • 我无法使var\u list=who\u user()工作。所以我相信这个函数不会返回任何东西。我不愿意侵入“who_user”宏本身的代码。是否有其他方法可以获取另一个变量中的用户变量列表

  • 有没有办法从中找出全局变量

  • 如果没有,那么scilab中有哪些内存管理技术


  • 我能够回答您的第一个问题:

    通过对who_用户功能本身的轻微修改:

    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
    
    函数nams=who_user1()
    //获取用户变量
    [nams,mem]=谁('get')//获取所有变量
    p=predef()//系统变量数
    st=堆栈大小()
    nams=nams(1:$-p+1);mem=mem(1:$-p+1);
    //可修改系统变量
    排除=['demolist'、'scicos\u pal'、'%scicos\u菜单'、,。。
    “%scicos\u short”、“%help”、“%help\u modules”、“MSDOS”、“who\u user”、“%scicos\u display\u mode”、。。。
    “%scicos_help”];
    ke=grep(不包括nams)
    nams(ke)=[];mem(ke)=[];
    n=尺寸(纳米,1);
    如果n==0,则返回,结束
    //按n*10个字符格式化名称
    ll=长度(纳米)+2;m=int((ll-1)/10)+1;
    k=1时:最大值(m)
    ks=find(m=k);
    如果ks[]那么nams(ks)=部分(nams(ks),1:(k*10));结束
    结束
    端功能
    
    这个函数应该为您提供所需的列表(我已将名称修改为who_user1)

    使用isglobal()函数可以确定特定变量是否为全局变量,但需要将变量传递给isglobal(),而不是传递变量名的字符串。上面列出的函数返回字符串向量


    您可以尝试的另一种方法是重写上述函数,直接使用varargout返回变量(而不是它们的名称),然后测试它们是否为全局变量

    我能够回答您的第一个问题:

    通过对who_用户功能本身的轻微修改:

    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
    
    函数nams=who_user1()
    //获取用户变量
    [nams,mem]=谁('get')//获取所有变量
    p=predef()//系统变量数
    st=堆栈大小()
    nams=nams(1:$-p+1);mem=mem(1:$-p+1);
    //可修改系统变量
    排除=['demolist'、'scicos\u pal'、'%scicos\u菜单'、,。。
    “%scicos\u short”、“%help”、“%help\u modules”、“MSDOS”、“who\u user”、“%scicos\u display\u mode”、。。。
    “%scicos_help”];
    ke=grep(不包括nams)
    nams(ke)=[];mem(ke)=[];
    n=尺寸(纳米,1);
    如果n==0,则返回,结束
    //按n*10个字符格式化名称
    ll=长度(纳米)+2;m=int((ll-1)/10)+1;
    k=1时:最大值(m)
    ks=find(m=k);
    如果ks[]那么nams(ks)=部分(nams(ks),1:(k*10));结束
    结束
    端功能
    
    这个函数应该为您提供所需的列表(我已将名称修改为who_user1)

    使用isglobal()函数可以确定特定变量是否为全局变量,但需要将变量传递给isglobal(),而不是传递变量名的字符串。上面列出的函数返回字符串向量

    您可以尝试的另一种方法是重写上述函数,直接使用varargout返回变量(而不是它们的名称),然后测试它们是否为全局变量

    谢谢,我是不是真的在找汉克斯,我是不是真的在找汉克斯