【问题标题】:Octave can't find function handleOctave 找不到函数句柄
【发布时间】:2021-02-17 03:19:17
【问题描述】:

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

error: @SSSimColourTextureSizeFillOrig: no function and no method found

出现此错误的代码是:

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

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

【问题讨论】:

    标签: matlab octave


    【解决方案1】:

    Octave 在函数句柄方面绝对没有问题。您的情况的确切问题是文件的格式。

    如果您查看帖子中链接的 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文件,可能是因为有些方法和技术作者不想分享,但需要以系统其余部分都能正常工作的方式分发此代码。

    【讨论】:

    • 没问题。抱歉,这不是您要找的答案!
    【解决方案2】:

    对于那些在这里结束的人,一种可能性是您在定义之前调用了该函数。比如下面的代码

    f = @computeSquare;
    a = 4;
    b = f(a);
    
    function y = computeSquare(x)
        y = x.^2;
    end
    

    来自here,会导致错误:

    错误:无效的函数句柄,无法找到 @computeSquare 的函数 错误:调用自 在第 3 行第 3 列测试

    您唯一需要做的就是将函数定义移到您调用它的位置上方:

    function y = computeSquare(x)
        y = x.^2;
    end
    
    f = @computeSquare;
    a = 4;
    b = f(a);
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多