2013-12-17 69 views
3

是否有可能檢索包含由函數句柄表示的函數的文件的絕對路徑?例如:從函數句柄獲取絕對文件路徑

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

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

在MATLAB中是否有相當於GETPATHFROMHANDLE的函數?它似乎通過簡單的功能,但我不能解決它。我知道func2strwhich函數,但在那種情況下不起作用。

回答

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獲得日e文件名,如果將它們串在一起:

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