matlab中的which函数详解-ChatGPT4o作答
which 函数是 MATLAB 中非常常用的一个函数,它用于查找给定函数、脚本、文件、变量、类方法等的路径。这个函数能够帮助用户定位文件在 MATLAB 路径中的位置。通过 which,你可以快速了解一个项(如函数、脚本等)是来自 MATLAB 环境中的哪个文件夹,以及它的具体路径。
以下是对 which 函数的详细解释,包括不同的用法、输入输出及其应用场景。
基本语法
-
查找函数或文件路径:
which item其中
item是你想要查找的项,可以是函数名、脚本名、类名或文件名。如果item位于 MATLAB 路径中,which会返回该项的完整路径。如果该项在 MATLAB 中不可用,它会返回'not found'。 -
返回路径到字符串:
str = which(item)此语法返回
item的完整路径并存储在变量str中。 -
定位函数在指定文件中的位置:
which fun1 in fun2这种用法用于查找由文件
fun2调用的函数fun1的路径。它可以帮助你区分在同一个命名空间或路径下,是否是调用的局部函数。 -
查找所有匹配的项:
which ___ -all使用
-all选项时,which会返回所有符合名称的项的路径,包括可能有多个版本的函数、重载的函数等。
功能和行为
1. 定位函数或文件的路径
which 最基本的功能是定位一个函数或文件的路径。例如:
which pinv
这将显示 pinv 函数的路径,如:
matlabroot/toolbox/matlab/matfun/pinv.m
表示该函数位于 matfun 文件夹中。
2. 查找私有函数
如果你有一个私有函数(通常位于 private 子文件夹中),你也可以使用 which 来查找它。例如:
which private/orthog
该命令会显示 private 文件夹中名为 orthog.m 的文件的路径。
3. 定位加载的 Java 类中的方法
如果你加载了一个 Java 类并实例化了它,你可以使用 which 来查找类中的方法。例如:
myDate = java.util.Date;
which setMonth
这将显示 setMonth 方法所在的路径,表示它是 java.util.Date 类的方法。
4. 查找局部函数
有时,你可能会想要查看某个函数是否是局部函数。你可以使用 which 结合 in 来查看一个函数是否是由指定文件中的局部函数调用。例如:
which parseargs in area
这会显示 parseargs 是否是由 area.m 文件中的局部函数调用。
5. 查找多个匹配项
如果路径中有多个项匹配 item,你可以使用 -all 参数来返回所有匹配项的路径。例如:
which openedFiles -all
这会列出所有在 MATLAB 路径上匹配 openedFiles 的项,通常用于查看是否有多个重载版本。
高级用法
1. 查找通过输入参数调用的函数
你还可以使用 which 查找使用特定输入参数时调用的函数。例如,如果你有一个 matfile 对象并希望查找 who 函数的路径,你可以这样做:
matObj = matfile('topography.mat');
which who(matObj)
这将返回 who 方法在 matfile 对象中的实现路径。
2. 使用字符串或字符向量作为参数
which 支持将项指定为字符向量或字符串标量。如果是函数格式,输入项需要用单引号或双引号括起来。例如:
str = which('pinv');
str 将包含 pinv 函数的完整路径。
3. 限制搜索范围
你还可以限制搜索范围,仅搜索 MATLAB 路径中的文件。例如:
which /myfunction
这将返回 myfunction.m 在 MATLAB 路径中的完整路径,而不包括内置函数或 Java 类。
4. 查找私有函数
当你使用 private 子文件夹中的函数时,你可以使用类似 which private/orthog 的语法来定位私有函数的位置。
输出
-
返回路径:
which会返回该项(函数、文件等)的完整路径。例如,如果你查找一个函数,它会返回该函数的路径。 -
返回
'not found':
如果你查找的项不在路径中,which会返回'not found',表示无法找到该项。 -
多重匹配:
如果路径中有多个匹配项,使用-all参数时,which会列出所有匹配项的路径。
示例
-
查找一个函数的路径:
which pinv输出:
matlabroot/toolbox/matlab/matfun/pinv.m -
查找私有函数:
which private/orthog输出:
matlabroot/toolbox/matlab/elmat/private/orthog.m -
查找特定 Java 方法:
myDate = java.util.Date; which setMonth输出:
setMonth is a Java method % java.util.Date method -
查找局部函数:
which parseargs in area输出:
matlabroot/toolbox/matlab/specgraph/area.m (parseargs) % Local function of area -
查找多个匹配项:
which openedFiles -all输出(举例):
built-in (matlabroot/toolbox/matlab/iofun/openedFiles)
局限性
which只能定位 MATLAB 路径中存在的函数、文件或类方法。对于没有加载的 Java 类方法,which只会在类已加载时返回路径。- 如果一个方法在
@文件夹中没有被定义或者不在命名空间中,它可能不会被which查找到。
总结
which 是一个非常强大的工具,它能帮助用户快速定位 MATLAB 环境中的函数、脚本、私有函数、Java 方法等。通过不同的用法(例如使用 -all 或 in),which 可以进一步精细化查找,从而帮助用户高效管理和定位代码文件。
更多推荐


所有评论(0)