可能重复:
在Matlab中查找当前m文件的位置
我想写一个m文件,它将显示定义函数的目录.
例如,如果函数foo.m放在目录c:\ bar和c:\ foo中(文件的完整路径是c:\ bar\foo.m或c:\ foo\foo.m),这两个命令都不在MATLAB路径上
addpath("c:\bar");
foo
Run Code Online (Sandbox Code Playgroud)
会产生结果:我位于目录c:\ bar
而
addpath("c:\foo");
foo
Run Code Online (Sandbox Code Playgroud)
会产生我位于目录c:\ foo中的结果
我怎么写这样的功能?
我想从一个我将在运行时确定的类调用静态方法,但我知道它是给定类的子类.所以我要说我有这些课程
class super {
public:
super();
static super *loadMe (ifstream &is);
}
class subA : public super {
public:
subA();
static super *loadMe (ifstream &is);
}
class subB : public super {
public:
static super *loadMe (ifstream &is);
private:
subB();
}
Run Code Online (Sandbox Code Playgroud)
让我们说我想在运行时(根据文件中的内容)确定是否要加载subA或subB.我可以这样做的一种方法是使用一个空对象来调用该方法
super getLoadType (ifstream &is) { if(complicatedFunctionOfIs(is)) return subA(); return subB()}
super *newObj = getLoadType(is).loadMe(is);
Run Code Online (Sandbox Code Playgroud)
但是我把subB的无参数构造函数设为私有,所以我不能在这里做.但我实际上并不需要超级对象,只需要超类的类类型.那么有没有办法将其表示为变量?
编辑:我知道在这种情况下,我可以返回一个函数指针,但我正在考虑更复杂的例子,可能需要调用多个静态函数.
MATLAB存储变量以及匿名函数.以下是文档中如何工作的示例.
表达式中的变量:
函数句柄不仅可以存储表达式,还可以存储表达式需要用于评估的变量.
例如,为需要系数a,b和c的匿名函数创建函数句柄.
Run Code Online (Sandbox Code Playgroud)a = 1.3; b = .2; c = 30; parabola = @(x) a*x.^2 + b*x + c;因为a,b和c在您创建抛物线时可用,所以函数句柄包含这些值.即使清除变量,值仍会保留在函数句柄中:
Run Code Online (Sandbox Code Playgroud)clear a b c x = 1; y = parabola(x) y = 31.5000
据推测,ab和c的值即使在保存并从mat文件重新加载时也与函数一起存储.在实践中,我发现这些值不会持久存在,尤其是在编辑最初创建函数的代码时.
有没有办法根据变量的数值定义函数句柄?我想要一些形式
>> a = 1.3;
>> b = .2;
>> c = 30;
>> parabola = @(x) a*x.^2 + b*x + c
parabola = @(x) a*x.^2+b*x+c
>> parabola2 = forceEval(parabola)
parabola2 = @(x) 1.3*x.^2+.2x+30
Run Code Online (Sandbox Code Playgroud)
编辑:也许我的问题是与文件关联,但当我编辑我最初定义匿名函数的文件时,我得到一个错误,看起来像:
无法在C:中找到函数@(ydata)nr /(na*dt)*normpdf(ydata,mu(j),s(j))./ normpdf(ydata,mu_a(j),s_a(j)). ..\mfilename.m.(我将mfile的名称更改为mfilename)
我对这类东西的通常解决方案是使用func2str()来删除文件依赖项,但这也会删除包含参数值的工作空间信息.所以我想强制所有参数在函数定义中采用它们的数值.
我正在使用labview 8.5.1
我有一个文件的路径存储为文本文件中的unix样式字符串.(例如文件包含字符串/ refs/heads/master)
我想将它转换为LABVIEW中的路径,但字符串到路径函数假定我有一个Windows样式路径字符串(例如\ refs\heads\master)
这个特定的上下文是我想用收集的数据记录一个git哈希代码,所以我总是知道我正在使用的软件的特定版本,git将文件存储为unix-style-strings.
一个快速的解决方案是找到并更改所有/到\,但这是不优雅的,如果它在OSX或使用unix样式格式的任何其他操作系统上运行,也会导致VI崩溃.
有没有办法强制字符串到路径VI使用特定的操作系统样式?
(建议标签:路径格式化)