¿Es posible definir más de un constructor de clase en Matlab? Si es así, ¿cómo?Constructor de clase múltiple Matlab
Respuesta
Cada clase tiene un constructor. Sin embargo ... el constructor puede aceptar cualquier número y tipo de argumentos, incluidos los basados en varargin
.
Por lo tanto, para proporcionar la opción de un tercer argumento por defecto en Java podría escribir algo como esto (ejemplos basados en java documentation):
public Bicycle(int startCadence, int startSpeed, int startGear) {
gear = startGear;
cadence = startCadence;
speed = startSpeed;
}
public Bicycle(int startCadence, int startSpeed) {
gear = 1;
cadence = startCadence;
speed = startSpeed;
}
En Matlab se podría escribir
methods (Access = public)
function self = Bicycle(varargin)
if nargin>2
gear = varargin{3};
else
gear = 1;
end
cadence = varargin{1};
speed = varargin{2};
end
end
No. Los constructores en OOP matlab son muy restringidos en comparación con otros lenguajes. No se establece explícitamente en la documentación AFAIK que puede tener múltiples constructores, sino que se refiere al constructor de una clase en singular en toda la documentación.
http://www.mathworks.co.uk/help/techdoc/matlab_oop/brd2m9e-1.html
Cada clase tiene un solo constructor, y cada .m-archivo sólo puede contener una definición de clase.
Si desea tener una clase con pequeñas diferencias dependiendo de la entrada, puede usar propiedades que definan conmutadores reconocidos por los métodos de clase. Si desea tener clases muy diferentes dependiendo de la entrada, puede crear una función generateClass
que llamará a una u otra clase definida en archivos diferentes. Por supuesto, si estas clases diferentes tienen muchos métodos y propiedades comunes, puede crear ambas como subclases a una superclase común.
Buena publicación ... pero tenga en cuenta el cartel original: Sea realmente MUY cuidadoso con la herencia. Le da mucha cuerda para colgarse. No recurra a ella si solo quiere tener un constructor predeterminado y otros constructores que puedan inicializar variables. Use varargin para obtener esta funcionalidad. – learnvst
La misma clase, solo el proceso de inicialización es diferente. Creo que pasaré todos los parámetros necesarios para construir una instancia de estas dos maneras y un mes re parámetro que definirá la forma de construir. Sucio pero rápido ... triste, mi solución era cada vez más comprensible ... ¡Qué vergüenza, matlab! – bsmca
@bsmca: siempre puede definir métodos (estáticos) que implementan las dos formas diferentes de compilación, y luego llama a cualquiera de ellos desde el constructor común. Solo asegúrese de crear el objeto solo antes o después, pero no dentro de estos métodos. – Jonas
El La respuesta de Pursuit funciona, pero un usuario que no está familiarizado con la función no puede ver cuántos argumentos se necesitan o para qué sirven. Yo recomendaría este:..
methods (Access = public)
function self = Bicycle(startCadence, startSpeed, startGear)
if nargin>2
gear = startGear;
else
gear = 1;
end
cadence = startCadence;
speed = startSpeed;
end
end
Si ahora escribe "bicicletas (" y esperar a que se puede ver al menos los tres argumentos La segunda posibilidad no se muestra aunque parece posible (por ejemplo de parcela) pero Don "No sé cómo hacer esto."
¿Eso realmente funciona para usted? Obtengo "no suficientes argumentos de entrada errror" (MATLAB: minrhs) si no proporciono todos los argumentos (en 2014a yb). Esto parece funcionar en funciones "gratuitas", pero no en constructores/miembros de la clase. –
- 1. Constructor de copia de Matlab
- 2. Dirección múltiple en el constructor de MailAddress
- 3. ¿Cómo hago una asignación múltiple en MATLAB?
- 4. múltiple virtual de la herencia y el constructor de la clase base llamada
- 5. ¿Funciona? C++ herencia múltiple y constructor de encadenamiento
- 6. Resumen Clase Constructor
- 7. C# clase sin constructor
- 8. matlab múltiple x eje uno debajo de otro
- 9. Clase Constructor interfiriendo con otra clase
- 10. ¿Spring MessageSource admite ruta de clase múltiple?
- 11. Atributos de clase múltiple en HTML
- 12. Llamando al constructor de clase hijo antes del constructor padre
- 13. llamar al constructor de otro constructor en una misma clase
- 14. C++ - ¿Cómo inicializo un constructor de una clase separada del constructor de una clase?
- 15. C++ constructor de la clase de gama
- 16. Rails múltiple belongs_to para la misma clase
- 17. clase abstracta + + mixin herencia múltiple en Python
- 18. Move Constructor llamando a la clase base Move Constructor
- 19. Clase heredada de la clase sin el constructor predeterminado
- 20. error constructor XmlSerializer con clase derivada de una clase base
- 21. Visibilidad del constructor de clase anidada
- 22. ¿Establecer constantes de clase después del constructor?
- 23. Pasar argumentos al constructor de clase
- 24. CoffeeScript extienden constructor de la clase
- 25. Accediendo al constructor de una clase anónima
- 26. constructor predeterminado de una clase heredada
- 27. castillo de Windsor interna Constructor/Clase
- 28. Herencia de clase de tipo herencia múltiple en ruby
- 29. variable de clase de matriz estática "definición múltiple" C++
- 30. Añadir constructor para deftype clase creada
Tenga en cuenta que no puede crear "self" dentro de una sentencia if, por lo que la primera vez que asigne algo a "self" tiene que aparecer antes o después de if-clause. – Jonas
terminó con esta solución :) tnx! – bsmca