我使用Octave运行selective search代码,它给了我这个错误:
error: @SSSimColourTextureSizeFillOrig: no function and no method found
。
产生此错误的代码是:
simFunctionHandles = {@SSSimColourTextureSizeFillOrig, @SSSimTextureSizeFill, @SSSimBoxFillOrig, @SSSimSize};
但是这段代码可以在MATLAB上成功运行,所以我认为Octave中存在一些错误,或者它不支持函数句柄?
答案 0 :(得分:4)
Octave绝对没有函数句柄的问题。您的案例中的确切问题是文件的格式。
如果您查看帖子中链接的Github仓库,您所指的功能是MATLAB P-Code files。这些是混淆的MATLAB文件,只能在MATLAB中运行。 P代码文件的目的是获取原始源代码并隐藏原始源代码,以便您可以获取原始源并对其进行修改以供自己使用。话虽如此,您别无选择,只能将此功能用于您的目的,而您无法修改其行为。
然而,Octave没有这种混淆支持,所以很自然它无法重建原始代码的运行方式。
查看此Octave主题以获取更多详细信息:http://octave.1599824.n4.nabble.com/Matlab-p-files-td1627334.html
....所以基本上,你是SOL。您只能在MATLAB中运行这些功能。但是,您可以通过联系原作者并获取原始.m
文件来获得一些运气,但这些是P-Code文件的事实可能是因为作者没有一些方法和技术。想要共享,但需要以这样的方式分发这些代码,以便系统的其余部分能够工作。
答案 1 :(得分:0)
对于那些最终到达这里的人来说,一种可能性是您在函数定义之前调用它。例如下面的代码
f = @computeSquare;
a = 4;
b = f(a);
function y = computeSquare(x)
y = x.^2;
end
来自here,会导致错误:
error: invalid function handle, unable to find function for @computeSquare error: called from test at line 3 column 3
您唯一需要做的就是将函数定义移到您调用它的位置上方:
function y = computeSquare(x)
y = x.^2;
end
f = @computeSquare;
a = 4;
b = f(a);