Разница в том, что в случае 1 вы создаете новый объект каждый раз перед вызовом методаEach, а в случае 2 - нет.
В сочетании с этим факт, что ваш первый тест мутирует объект. Если все тесты ссылаются на один и тот же объект (т. Е. Случай 2), то эта мутация повлияет на любой код, который выполняется после первого теста. Если вместо этого объект перезаписывается перед каждым тестом (случай 1), то мутация не повлияет на другие тесты.
Есть несколько вариантов решения этой проблемы. Один состоит в том, чтобы просто сохранить случай 1; Сбрасывая в известное состояние каждый раз, вы можете получить чистое состояние, чтобы все тесты работали. Другой вариант - не изменять объект. Возможно, тесты могли бы скопировать объект, а затем изменить эту копию.
Когда Вы выполняете вызов:
obj.roll_dice;
Это на самом деле эквивалентно:
roll_dice(obj);
Так obj
"секретный" автоматический аргумент, передаваемый roll_dice
. Если Вы переписываете метод roll_dice
для принятия единственного входного параметра (даже если Вы не используете его) вещи должны работать правильно.
С другой стороны, если Вы знаете наверняка что Ваш метод roll_dice
движение не должно выполнять операции на объекте класса, можно объявить, что это статический метод, как Dan предполагает.
Для получения дополнительной информации об объектно-ориентированном программировании в MATLAB вот ссылка на онлайн-документацию.
Я считаю, что вы также можете обойти это, объявив roll_dice статическим методом.