Usted podría potencialmente hacer algo como esto por la sobrecarga de las funciones SUBSREF y SUBSASGN para todos los diferentes tipos de objetos (incorporado o definido por el usuario) que desea cambiar el esquema de indexación para. Un ejemplo de una forma de sobrecargar métodos para tipos incorporados se da en my answer a this question. Los inconvenientes? ...
- Esto sería una empresa grande y traidora.
- Rompe todas las funciones integradas que dependen de la indexación basada en una sola, lo que significa que básicamente tendría que volver a escribir la mayoría de MATLAB.
- Cualquier código que desee utilizar from other MATLAB users, que también se basaría en la indexación basada en uno, tendría que ser reescrito.
En resumen, el cambio de la forma incorporado de tipos manejar la indexación no es ni remotamente factible. Sin embargo, hay otra opción (aunque todavía un poco peligrosa) que hace uso de subclassing in MATLAB's OOP system. Por ejemplo, usted podría hacer una nueva clase double_zb
que hereda de la clase double
incorporada:
classdef double_zb < double
methods
function obj = double_zb(data)
if nargin == 0
data = 0;
end
obj = [email protected](data); % initialize the base class portion
end
end
end
A continuación, se puede extender double_zb
con implementaciones especializadas de SUBSREF y SUBSASGN que tienen índices de base cero. Sin embargo, usar objetos double_zb
en lugar de objetos double
de manera efectiva en su código puede requerir que implemente de nuevo todos los demás métodos para objetos double
o implemente de algún modo métodos de conversión para usar objetos double_zb
con métodos double
. Ni siquiera estoy seguro de todos los detalles involucrados en hacer esto, pero ciertamente puedo decir que sería un dolor de cabeza colosal.
Mi último consejo ... deja de preocuparte y aprende a amar la indización basada en uno. ;)
Como alguien que regularmente tiene que usar MATLAB para una clase, no puedo decirle cuánto deseo que esto fuera posible. Eso y ser capaz de hacer un 'var ++;' pero, por desgracia, MATLAB tiene un lugar y ese lugar no está en una seria programación no matemática. –
Puede ser una tarea interesante agregar tal característica a MATLAB sin descifrar el código. – zellus
@zellus - "Definir interesante". ; "Oh, Dios, oh Dios, todos vamos a morir" – Donnie