从函数句柄获取绝对文件路径

时间:2013-12-17 00:59:34

标签: matlab function-handle

是否有可能检索包含函数句柄所代表的函数的文件的绝对路径?例如:

%child folder containing test_fun.m file
handle = @test_fun
cd ..

%root folder - test_fun not available
path = GETPATHFROMHANDLE(handle)

在MATLAB中是否等同于GETPATHFROMHANDLE函数?它似乎通过简单的功能,但我不能解决它。我了解func2strwhich函数,但在这种情况下不起作用。

1 个答案:

答案 0 :(得分:7)

函数句柄(即class function_handle的对象)有一个名为functions的方法,它将返回有关句柄的信息,包括相关文件的完整路径:

>> fs = functions(h)
fs = 
    function: 'bar'
        type: 'simple'
        file: 'C:\Program Files\MATLAB\R2013b\toolbox\matlab\specgraph\bar.m'
>> fs.file
ans =
C:\Program Files\MATLAB\R2013b\toolbox\matlab\specgraph\bar.m

由于functions的输出为struct,因此可以使用getfield在单个命令中完成此操作:

>> fName = getfield(functions(h),'file')
fName =
C:\Program Files\MATLAB\R2013b\toolbox\matlab\specgraph\bar.m

但是,如果将它们串在一起,则可以使用func2strwhich来获取文件名:

>> h = @bar;
>> fName = which(func2str(h))
fName =
C:\Program Files\MATLAB\R2013b\toolbox\matlab\specgraph\bar.m