Вы могли бы потенциально сделать что-то подобное, перегрузив функции SUBSREF и SUBSASGN для всех различных типов объектов (встроенных или определенных пользователем).) для которого вы хотите изменить схему индексации.Пример одного способа перегрузки методов для встроенных типов приведен в мой ответ на этот вопрос .Недостатки? ...
- Это было бы большим и коварным делом.
- Это сломало бы все встроенные функции, основанные на индексации по одному, что означает, что выВам пришлось бы в основном переписать большую часть MATLAB.
- Любой код, который вы могли бы использовать от других пользователей MATLAB , который также полагался бы на индексацию на основе одного, должен был бы быть переписан.
Короче говоря, изменение способа индексирования встроенных дескрипторов даже удаленно невозможно.Однако есть еще один (хотя и несколько коварный) вариант, использующий подклассы в ООП-системе MATLAB .Например, вы можете создать новый класс double_zb
, который наследуется от встроенного double
класса:
classdef double_zb < double
methods
function obj = double_zb(data)
if nargin == 0
data = 0;
end
obj = obj@double(data); % initialize the base class portion
end
end
end
Затем вы можете расширить double_zb
с помощью специализированных реализаций SUBSREF и SUBSASGN , которые принимают нулевые индексы.Тем не менее, для эффективного использования double_zb
объектов вместо double
объектов в вашем коде может потребоваться повторная реализация всех других методов для объектов double
или каким-либо образом реализовать методы конвертера для использования double_zb
объектов с методами double
,Я даже не уверен во всех деталях, связанных с этим, но могу с уверенностью сказать, что это будет колоссальная головная боль.
Мой окончательный совет ... перестаньте беспокоиться и научитесь любить основанную на одноминдексации.;)