Octave无法找到函数句柄

时间:2015-08-29 03:29:27

标签: matlab octave

我使用Octave运行selective search代码,它给了我这个错误:

error: @SSSimColourTextureSizeFillOrig: no function and no method found

产生此错误的代码是:

simFunctionHandles = {@SSSimColourTextureSizeFillOrig, @SSSimTextureSizeFill, @SSSimBoxFillOrig, @SSSimSize};

但是这段代码可以在MATLAB上成功运行,所以我认为Octave中存在一些错误,或者它不支持函数句柄?

2 个答案:

答案 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);