Function 为什么我会得到一个“;输入参数太多“;不传递任何消息时出错?

Function 为什么我会得到一个“;输入参数太多“;不传递任何消息时出错?,function,matlab,parameters,arguments,Function,Matlab,Parameters,Arguments,我正在用MATLAB编写一些简单的面向对象代码。我试图调用我的一个类方法,其定义中没有输入或输出参数 功能定义: 功能掷骰子 函数调用: obj.roll\u dice 当执行此操作时,MATLAB表示: ??? Error using ==> roll_dice Too many input arguments. Error in ==> DiceSet>Diceset.Diceset at 11 obj.roll_dice; (etc...) 有人知道是什么引起的吗?是

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

功能定义:

功能掷骰子

函数调用:

obj.roll\u dice

当执行此操作时,MATLAB表示:

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

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

有人知道是什么引起的吗?是否存在我不知道正在传递的秘密自动参数?

当您拨打电话时:

obj.roll_dice;
它实际上相当于:

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

或者,如果您确定方法
roll\u dice
不会对类对象执行任何操作,则可以将其声明为as


有关MATLAB中面向对象编程的更多信息,

我相信您也可以通过将roll\u dice声明为静态方法来解决这个问题。

也就是说,roll\u dict被称为对象上的一种方法,而它不应该被称为静态方法。尝试roll_dice()而不是obj.roll_dice()。这可能会起作用,但他确实说过roll_dice是一个类方法,所以我猜它旨在对给定对象进行操作。你是对的,但现在我有一个不同的问题。我来自Java和PHP等语言,在这些语言中使用类非常简单。self.roll\u dice或this.roll\u dice的等价物是什么?我见过的大多数类方法都是将正在操作的对象作为第一个参数来编写的。第一个论点可以被认为是“自我”的参照。我建议这个MATLAB文档链接提供帮助:+1:是的,如果roll_dice是一个静态方法,那么obj.roll_dice应该可以工作,而不需要向函数定义添加任何输入参数。