【问题标题】:Why do I get a "Too many input arguments" error when not passing any?为什么不传递任何参数时会出现“输入参数过多”错误?
【发布时间】:2010-10-17 11:14:50
【问题描述】:

我正在 MATLAB 中编写一些简单的面向对象代码。我正在尝试调用我的类方法之一,但其定义中没有输入或输出参数。

函数定义:

function roll_dice

函数调用:

obj.roll_dice;

执行此操作时,MATLAB 会说:

??? Error using ==> roll_dice
Too many input arguments.

Error in ==> DiceSet>Diceset.Diceset at 11
obj.roll_dice;
(etc...)

有人知道是什么原因造成的吗?是否有我不知道我正在传递的秘密自动参数?

【问题讨论】:

    标签: function matlab parameters arguments


    【解决方案1】:

    当您拨打电话时:

    obj.roll_dice;
    

    其实相当于:

    roll_dice(obj);
    

    所以obj 是传递给roll_dice 的“秘密”自动参数。如果您重写方法roll_dice 以接受单个输入参数(即使您不使用它),事情应该可以正常工作。

    或者,如果您确定您的方法roll_dice 不会对类对象执行任何操作,您可以将其声明为static methodDan suggests

    有关 MATLAB 中面向对象编程的更多信息,here's a link to the online documentation

    【讨论】:

    • 即,roll_dict 被作为对象上的一个方法调用,而它不应该被调用。试试 roll_dice() 而不是 obj.roll_dice()。
    • 这可能行得通,但他确实说 roll_dice 是一个类方法,所以我猜它是为了对给定对象进行操作。
    • 你是对的,但现在我有一个不同的问题。我来自 Java 和 PHP 等语言,在这些语言中使用类相当简单。 self.roll_dice 或 this.roll_dice 的等价物是什么?
    • 我见过的大多数类方法都是为了接受被操作的对象作为第一个参数而编写的。第一个参数可以被认为是“自我”引用。我建议这个 MATLAB 文档链接寻求帮助:mathworks.com/access/helpdesk/help/techdoc/matlab_oop/…
    【解决方案2】:

    我相信您也可以通过将 roll_dice 声明为静态方法来解决此问题。

    【讨论】:

    • +1:是的,如果 roll_dice 是静态方法,那么 obj.roll_dice 应该可以工作,而无需向函数定义添加任何输入参数。
    猜你喜欢
    • 2012-12-21
    • 1970-01-01
    • 1970-01-01
    • 2013-01-05
    • 1970-01-01
    • 2021-01-14
    • 2021-05-13
    • 2011-11-11
    • 2019-10-06
    相关资源
    最近更新 更多