当创建简单的一次性程序时,可以非常方便地在提示下查看哪些变量可用。函数who及其兄弟姐妹whos和whos_line_format将显示有关内存中内容的不同信息,如下所示。
str = "A random string"; who -| Variables in the current scope: -| -| ans str
-regexp当匹配要显示的变量时,这些模式被认为是正则表达式。接受的相同模式语法regexp函数。
-file下一个参数被视为文件名。将列出在指定文件中找到的所有变量。从文件中读取变量时不接受任何模式。
如果作为函数调用,则返回与给定模式匹配的已定义变量名称的元胞数组。
详见: whos,isglobal,isvarname,exist,regexp.
图案¶
参数模式…¶
S whos 图案¶
提供与给定模式匹配的当前定义变量的详细信息。
参数和模式语法与的相同who命令
每个变量的扩展信息汇总在一个表中,表中有以下默认条目。
列出的变量的属性。可能的属性包括:
本地范围中的变量
c复杂类型的变量。
f形式参数(函数参数)。
g具有全局范围的变量。
p持久变量。
变量的名称。
变量的逻辑大小。标量为1x1,向量为1xN或Nx1,2-D矩阵为MxN。
当前用于存储变量的内存量。
变量的类。示例包括double、single、char、uint16、cell和struct。
该表格可以自定义,以通过该函数显示或多或少的信息whos_line_format.
如果whos作为函数调用,返回与给定模式匹配的定义变量名的结构体数组。结构体中描述每个变量的字段有:名称、大小、字节、类、全局、稀疏、复杂、嵌套、持久。
详见: who,whos_line_format.
val= whos_line_format ()¶
old_val= whos_line_format (new_val)¶
old_val= whos_line_format (new_val地方的¶
查询或设置命令使用的格式字符串whos.
完整格式字符串为:
%[modifier]<command>[:width[:left-min[:balance]]];
以下命令序列可用:
%a打印变量的属性(c=复杂,s=稀疏,f=形式参数,g=全局,p=持久)。
%b打印变量占用的字节数。
%c打印变量的类名。
%e打印变量所包含的元素。
%n打印变量名。
%s打印变量的维度。
%t打印变量的类型名称。
每个命令也可能有一个对齐修饰符:
l左对齐。
r右对齐(默认)。
c列对齐(仅适用于命令%s)。
这个width参数是一个正整数,指定用于打印的最小列数。不需要最大值,因为字段将根据需要自动展开。
参数left-min和balance仅当列对齐修饰符与命令“”一起使用时才可用s’.balance指定将在条目之间对齐的字段宽度内的列编号。编号从0开始,表示最左边的列。left-min指定指定平衡列左侧的最小字段宽度。
默认格式为:
" %la:5; %ln:6; %cs:16:6:1; %rb:12; %lc:-1;\n"
当从具有的函数内部调用时"local"参数,则该变量会为函数及其调用的任何子程序在本地进行更改。退出函数时将恢复原始变量值。
详见: whos.
可以确定给定的变量是否可用,而不是显示哪些变量在内存中。这样,就有可能根据变量的存在来改变程序的行为。以下示例说明了这一点。
if (! exist ("meaning", "var"))
disp ("The program has no 'meaning'");
endif
c= exist (name)¶
c= exist (name,type)¶
检查是否存在name作为变量、函数、文件、目录或类。
返回代码c是其中之一
name是一个变量。
name是一个绝对的文件名,在Octave的path,或(在附加'之后.m')Octave的函数文件path.
name是'十月或.mex'文件在Octave的path.
name是一个内置函数。
name是一个目录。
name是一个classdef类。
name是一个与文件无关的函数(在命令行中输入)。
name不存在。
如果可选参数type如果提供了,请仅检查指定类型的符号。有效类型为
"var"仅检查变量。
"builtin"仅检查内置函数。
"dir"仅检查目录。
"file"仅检查文件和目录。
"class"仅检查classdef类。
如果没有给定类型并且存在多个可能的名称匹配,exist将根据以下优先级列表返回一个代码:变量、内置函数、oct文件、目录、文件、类。
exist如果一个名为name存在于Octave的搜索路径中。有关不在搜索路径上的其他类型文件的信息,请使用以下函数的组合file_in_path和stat相反
编程注意事项:如果name从一个有缺陷的.oct/.mex文件实现,调用exist可能导致Octave崩溃。为了保持高性能,Octave信任.oct/.mex文件,而不是对它们进行沙盒处理。
通常Octave会管理内存,但有时手动从内存中删除变量是可行的。当处理填充了大量内存的大变量时,通常需要这样做。在使用IEEE浮点格式的计算机上,以下程序赋值一个需要大约128 MB内存的矩阵。
large_matrix = zeros (4000, 4000);
从于内存中有此变量可能会减慢其他计算速度,因此可能需要手动将其从内存中删除。这个clear或clearvars函数执行此操作。
pattern…¶
options pattern…¶
删除与给定名称匹配的名称patterns,从而释放内存。
这个pattern可能包含以下特殊字符:
?匹配任意单个字符。
*匹配零个或多个字符。
[list]匹配指定的字符列表list.如果第一个特征!或^,匹配除指定字符以外的所有字符list。例如,图案[a-zA-Z]将匹配所有小写和大写字母字符。在Windows上,方括号是按字面意思匹配的,不用于对字符进行分组。
例如,命令
clear foo b*r
清除名称foo以及所有以字母'开头的名字b'并以字母结尾'r’.
如果clear在没有任何参数的情况下调用,则从当前工作区中清除所有用户定义的变量(即局部变量)。存在的任何全局变量在当前工作区中将不再可见,但它们将继续存在于全局工作区中。函数不受此形式的影响clear.
以下参数有长短两种形式
all, -all, -a从符号表中清除所有本地和全局用户定义的变量以及所有函数。
-exclusive, -x清除这样做的变量不匹配以下模式。
functions, -functions, -f从函数符号表中清除函数名称。永久变量将被重新初始化为其默认值,除非函数已被锁定在内存中mlock.
global, -global, -g清除全局变量名。
variables, -variables, -v清除局部变量名。
classes, -classes, -c清除类结构体表和所有对象。
-regexp, -r这个pattern参数被视为正则表达式,任何匹配都将被清除。
除了独家和-正则表达式,所有长参数也可以在不带破折号的情况下使用。注意,除了独家,可能只显示一个其他参数。所有参数必须出现在任何模式之前。
编程说明:命令清楚的name仅清除变量name当一个变量和一个名为name当前已定义。例如,假设您定义了一个函数foo,然后通过执行赋值将其隐藏foo = 2.执行命令clear fooonce将清除变量定义并恢复的定义foo作为一种函数。正在执行clear foo第二次将清除函数定义。
当链接到全局变量的局部变量名被清除时,只有该变量的局部副本被删除。全局副本不可访问,可以使用恢复全球的global_varname相反地清除-gglobal_varname将删除局部变量和全局变量。
pattern…¶
-正则表达式pattern…¶
除了pattern…¶
…-除了-regexppattern…¶
全球的¶
删除与给定匹配的变量patterns来自内存。
这个pattern可能包含以下特殊字符:
?匹配任意单个字符。
*匹配零个或多个字符。
[list]匹配指定的字符列表list。如果第一个字符是!或^,匹配除指定字符外的所有字符list。例如,图案[a-zA-Z]将匹配所有小写和大写字母字符。
如果-正则表达式参数,然后将后续模式作为正则表达式处理,并清除任何匹配项。
如果除了参数,然后后续模式选择将不被清除。
如果全球的参数,则所有模式都将应用于全局变量,而不是局部变量。
当在没有自变量的情况下调用时,clearvars删除所有局部变量。
示例代码:
清除以开头的所有变量'x'以及特定变量"foobar"
clearvars x* foobar
清除特定变量"foobar"并使用正则表达式清除以开头的所有变量'x'或'y'.
clearvars foobar -regexp ^x ^y
清除除之外的所有变量"foobar"
clearvars -except foobar
清除以开头的所有变量"foo",除了那些endingin"bar"
clearvars foo* -except -regexp bar$
()¶
在中整合工作区内存MATLAB.
提供此函数是为了兼容性,但在Octave中不起任何作用。
详见: clear.
关于函数或变量的信息,如其在文件系统中的位置,也可以从Octave中获取。这通常只在程序开发过程中有用,而不是在程序中有用。
name…¶
qname…¶
文本 type ("name", …)¶
显示的内容name它可以是文件、函数(m-file)、变量、运算符或关键字。
type通常在描述的类别的标题行之前name例如函数或变量;这个q参数抑制此行为。
如果未使用输出变量,则内容将显示在屏幕上。否则,将返回一个字符串元胞数组,其中每个元素对应于每个指定函数的内容。
name…¶
[str, …] = which ('name', …)¶
显示每个的类型name.
如果name是从函数文件中定义的,也会显示文件的全名。
dir¶
w what (dir)¶
列出目录中特定于Octave的文件dir.
如果dir则使用当前目录。
如果指定返回参数,则在结构体中返回找到的文件w。该结构体包含以下字段:
目录的完整路径dir
m文件的元胞数组
垫锉的元胞数组
mex文件的元胞数组
oct文件的元胞数组
mdl文件的元胞数组
slx文件的元胞数组
p文件的元胞数组
类目录的元胞数组(@classname/)
包目录的元胞数组(+pkgname/)
兼容性说明:Octave不支持mdl、slx和p文件。what将始终为这些类别返回一个空列表。
版权所有 © 2024-2025 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号-2