我希望类的构造函数自动确定调用函数的完整路径,以便该类可以编写一个保证在调用者目录中的文件(而不是碰巧是pwd().
所以,我有以下设置:
在some_path/test.m:
function test
SomeClass()
end
在some_path/some_subdir/SomeClass.m:
classdef SomeClass < handle
methods
function obj = SomeClass()
evalin('caller', 'mfilename(''fullpath'')')
end
end
end
当我打电话时test(),我得到以下信息:
>> test()
ans =
'some_path/some_subdir/SomeClass.m' % <- ...why?
我希望调用mfilename()inevalin('caller', ...)来评估 inside test(),但显然,这不会发生......
嵌套evalins似乎没有帮助:
...
function obj = SomeClass()
evalin('caller', ' evalin(''caller'', ''mfilename(''''fullpath'''')'') ')
end
...
>> test()
ans =
'some_path/some_subdir/SomeClass.m'
让它工作的唯一方法是不那么直观dbstack():
...
function obj = SomeClass()
S = dbstack(1, '-completenames');
S(1).file
end
...
>> test()
ans =
'some_path/test.m'
我错过了什么?