【问题标题】:Too many input parameters error from class method [duplicate]类方法的输入参数过多错误[重复]
【发布时间】:2013-10-31 07:44:28
【问题描述】:

我在 MATLAB 中编写了一个类,如下所示:

classdef sizeInfo
properties
end

methods
    function [row column] = getSize(m)
        [row column] = size(m); 
    end
end
end

当我使用这个类的getSize函数时,总是报如下错误:

s=sizeInfo
[r c]=s.getSize(data)
Error using sizeInfo/getSize
Too many input arguments.

有人知道为什么吗?

【问题讨论】:

  • 什么是data?如果你输入一个标量,你会得到什么?

标签: matlab matlab-class


【解决方案1】:

对于getSize 的定义(不需要访问类的实例),您应该将其定义为Static

methods(Static)
    function [row column] = getSize(m)
        [row column] = size(m); 
    end
end

【讨论】:

    【解决方案2】:

    类函数的第一个参数始终是对对象本身的引用,因此function [row column] = getSize(m) 是一个没有参数的函数,而 m 是隐式传递的引用。

    classdef sizeInfo
    properties
    end
    
    methods
        function [row column] = getSize(obj,m)
            [row column] = size(m); 
        end
    end
    end
    

    一个建议:仔细阅读文档。在学习了 Java、c++ 和 python 之后,我希望了解 oop。 Matlab 一次又一次地给我惊喜。

    【讨论】:

    • +1,但为什么要投诉?传递对 self 的引用与 Python 的做法没有什么不同...?
    • 我不是在抱怨这种行为,而是曾经尝试实现一个未被evalin('base','clear all') 破坏的单例模式,而不使用java?有时几乎不可能调试为什么您的代码无法在客户环境中运行。
    • 将其定义为静态方法更具可读性
    • 通常我会避免使用单例——几乎总是有更好的选择(参见wiki)。并记住:“尝试构建一个即使是傻瓜也能使用的系统,只有傻瓜才会使用它。” :)
    猜你喜欢
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    • 2014-05-09
    • 1970-01-01
    • 2014-12-06
    相关资源
    最近更新 更多