Octave 找不到函数句柄
Octave can't find function handle
我使用 Octave 来 运行 selective search 代码,它给我这个错误:
error: @SSSimColourTextureSizeFillOrig: no function and no method found
。
出现这个错误的代码是:
simFunctionHandles = {@SSSimColourTextureSizeFillOrig, @SSSimTextureSizeFill, @SSSimBoxFillOrig, @SSSimSize};
但是这段代码在 MATLAB 上可以成功运行,所以我猜 Octave 中有一些错误或者它不支持函数句柄?
Octave在函数句柄方面绝对没有问题。您的具体问题是文件的格式。
如果您查看 post 中链接的 Github 存储库,您所指的函数是 MATLAB P-Code files。这些是经过混淆的 MATLAB 文件,在 MATLAB 中只能是 运行。 P-Code 文件的目的是获取原始源代码并隐藏原始源代码,这样您就无法获取原始源代码并对其进行修改以供自己使用。也就是说,您别无选择,只能将此功能用于您的目的,并且您无法修改其行为。
然而,Octave 没有这种混淆支持,因此它自然无法为您重构原始代码运行。
查看此 Octave 线程了解更多详细信息:http://octave.1599824.n4.nabble.com/Matlab-p-files-td1627334.html
.. 所以基本上,你是 SOL。您只能 运行 MATLAB 中的那些函数。然而,你可能有一些运气,联系原作者并获得原始 .m
文件,但这些是 P-Code 文件的事实可能是因为有一些作者不想的方法和技巧共享,但需要以系统其余部分正常工作的方式分发此代码。
对于那些最终出现在这里的人,一种可能是您在函数定义之前调用它。例如下面的代码
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);
我使用 Octave 来 运行 selective search 代码,它给我这个错误:
error: @SSSimColourTextureSizeFillOrig: no function and no method found
。
出现这个错误的代码是:
simFunctionHandles = {@SSSimColourTextureSizeFillOrig, @SSSimTextureSizeFill, @SSSimBoxFillOrig, @SSSimSize};
但是这段代码在 MATLAB 上可以成功运行,所以我猜 Octave 中有一些错误或者它不支持函数句柄?
Octave在函数句柄方面绝对没有问题。您的具体问题是文件的格式。
如果您查看 post 中链接的 Github 存储库,您所指的函数是 MATLAB P-Code files。这些是经过混淆的 MATLAB 文件,在 MATLAB 中只能是 运行。 P-Code 文件的目的是获取原始源代码并隐藏原始源代码,这样您就无法获取原始源代码并对其进行修改以供自己使用。也就是说,您别无选择,只能将此功能用于您的目的,并且您无法修改其行为。
然而,Octave 没有这种混淆支持,因此它自然无法为您重构原始代码运行。
查看此 Octave 线程了解更多详细信息:http://octave.1599824.n4.nabble.com/Matlab-p-files-td1627334.html
.. 所以基本上,你是 SOL。您只能 运行 MATLAB 中的那些函数。然而,你可能有一些运气,联系原作者并获得原始 .m
文件,但这些是 P-Code 文件的事实可能是因为有一些作者不想的方法和技巧共享,但需要以系统其余部分正常工作的方式分发此代码。
对于那些最终出现在这里的人,一种可能是您在函数定义之前调用它。例如下面的代码
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);