Приоритет объекта в вызове метода

Приоритет объекта

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

Для примера рассмотрим выражение

objectA + objectB

Обычно объекты имеют равный приоритет, и вызывается метод, связанный с крайним левым объектом. Однако существует два исключения:

  • Классы, определенные с classdef синтаксис имеет приоритет над этими классами MATLAB:

    double, single, int64, uint64, int32, uint32, int16, uint16, int8, uint8, char, string, logical, cell, struct, и function_handle.

  • Классы, заданные с помощью classdef синтаксис может задать их относительный приоритет относительно других классов, используя InferiorClasses атрибут.

Рассмотрим пример из Представления полиномов с классами. The DocPolynom класс задает plus метод, который позволяет добавлять DocPolynom объекты. Учитывая объект p:

p = DocPolynom([1 0 -2 -5])
p =
    x^3-2*x-5

выражение:

1 + p
ans =
    x^3-2*x-4

вызывает DocPolynom plus метод (который преобразует double, 1, в DocPolynom объект, а затем реализует сложение двух полиномов). The DocPolynom класс имеет приоритет над встроенным double класс.

Определение приоритета

Можно задать относительный приоритет классов, заданный с помощью classdef синтаксис путем перечисления нижестоящих классов в атрибуте класса. The InferiorClasses свойство помещает класс ниже других классов в иерархию приоритетов. Определите InferiorClasses свойство в classdef оператор:

classdef (InferiorClasses = {?class1,?class2}) myClass

Этот атрибут устанавливает относительный приоритет определяемого класса с порядком перечисленных классов.

Расположение в иерархии

Если objectA выше objectB в иерархии приоритетов, затем выражение

objectA + objectB

вызывает @classA/plus.m. И наоборот, если objectB выше objectA в иерархии приоритетов MATLAB вызывает @classB/plus.m.

Похожие темы