Почему я получаю ошибку «Слишком много входных аргументов», когда не передаю их? - PullRequest
7 голосов
/ 04 апреля 2009

Я работаю над некоторым простым объектно-ориентированным кодом в 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...)

У кого-нибудь есть идеи, что может быть причиной? Есть ли секретные автоматические аргументы, которые я не знаю, что я передаю?

Ответы [ 2 ]

13 голосов
/ 04 апреля 2009

При совершении звонка:

obj.roll_dice;

Это фактически эквивалентно:

roll_dice(obj);

То есть obj - это «секретный» автоматический аргумент, передаваемый roll_dice. Если вы переписываете метод roll_dice, чтобы принять один входной аргумент (даже если вы его не используете), все должно работать правильно.

В качестве альтернативы, если вы точно знаете, что ваш метод roll_dice не будет выполнять никаких операций над объектом класса, вы можете объявить его как статический метод , как Дэн предлагает .

Для получения дополнительной информации об объектно-ориентированном программировании в MATLAB, вот ссылка на онлайн-документацию .

3 голосов
/ 10 апреля 2009

Полагаю, вы также можете обойти это, объявив roll_dice статическим методом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...