调用一个不在Matlab路径上的函数而不添加PATH

rev*_*eer 16 matlab function path call

我一直在搜索整个下午并且找不到解决方案来通过指定路径而不是将其目录添加到路径来在matlab中调用函数.

这个问题非常类似于是否可以调用一个不在MATLAB路径中的函数?,但在我的情况下,我不想调用内置函数,而只是调用m文件中定义的普通函数.

我认为句柄可能是一个解决方案(因为显然它们可以引用不在路径上的函数),但是我再次发现无法创建句柄而不cd在目录中创建句柄,在那里创建它并且cd返回.试图"探索"函数处理对象是什么以及如何通过引用不在路径上的特定函数来创建一个,这让我无处可去.

因此,解决方案可能来自两个角度:
1)您知道如何为特定目录中的m文件创建句柄.
2)你知道一种不在matlab路径上调用函数的方法.

编辑:我刚刚发现了functions(myhandle)一个实际上让你看到句柄引用的文件路径的函数.但是仍然无法修改它......

Bre*_*son 9

这是可行的,但需要一些解析和调用evalin.

我(多年前!)添加了一个函数给MATLAB Central File Exchange externalFcn

http://www.mathworks.com/matlabcentral/fileexchange/4361-externalfcn

管理对路径外函数的调用.例如,我有一个调用的函数offpathFcn,它只返回一个带有成功消息的结构,以及一个输入的值.将该功能存储在我的MATLAB路径中,我可以使用以下方法调用它:

externalfcn('out = C:\MFILES_OffPath\offpathFcn(''this is a test'')');
Run Code Online (Sandbox Code Playgroud)

返回:

out = 
    success: 1
    input: 'this is a test'
Run Code Online (Sandbox Code Playgroud)

(请注意,我的实现是有限的,并且可以改进;您必须包含一个具有相同符号的输出才能工作.但它应该向您展示如何实现您想要的.)

(MathWorks应用工程师)

  • 感谢您的回复.是的,我在搜索解决方案的过程中找到了`externalfcn`,但这确实是`cd`s到目录而``````````` 这对我来说是慢得令人无法接受的.我现在发现的唯一解决方案是通过`cd`ing和`cd`ing来创建一个句柄...一旦你有了句柄,函数调用很快. (3认同)
  • @strpeter不,我最后使用的解决方案是`cd`到目录,在那里创建一个句柄,然后`cd`-ing.然后句柄仍然引用特定文件夹中不在路径上的函数,您可以调用此句柄.但我发现无法使用任何其他方法调用不在路径上的函数... (2认同)

Thi*_*lon 5

注释1中提到的在调用函数之前创建函数句柄的解决方案很好地实现了@Rody Oldenhuis的FEX贡献:http: //www.mathworks.com/matlabcentral/fileexchange/45941-constructor-for-functionhandles